如何在AWS Amplify集成的ExpressJS Lambda中获取Cognito用户名
在Amplify集成的Express Lambda中获取Cognito用户名(无需自定义授权器)
前提条件
确保你通过Amplify CLI创建API时,已选择Amazon Cognito User Pool作为授权类型——API Gateway会自动验证请求中的JWT令牌,并将用户信息注入Lambda事件上下文。
实现步骤
借助aws-serverless-express/middleware的eventContext中间件,请求对象req会携带API Gateway的事件数据,Cognito用户信息存储在req.apiGateway.event.requestContext.authorizer.claims中,直接取用即可:
const express = require('express') const bodyParser = require('body-parser') const awsServerlessExpressMiddleware = require('aws-serverless-express/middleware') const app = express() app.use(bodyParser.json()) app.use(awsServerlessExpressMiddleware.eventContext()) app.get('/project', function (req, res) { // 从Cognito授权器的claims中获取用户名 const cognitoUsername = req.apiGateway.event.requestContext.authorizer.claims['cognito:username']; res.json({success: `Welcome ${cognitoUsername}`, url: req.url}); }); // 导出app供AWS Lambda调用 module.exports = app;
额外说明
- 除了
cognito:username,还可从claims中获取其他用户属性,比如email(用户邮箱)、sub(用户唯一标识ID)等; - 前端使用Amplify API客户端发起请求时,会自动携带
Authorization: Bearer <JWT令牌>,无需手动处理令牌传递。
内容的提问来源于stack exchange,提问作者Orfeas Magoulas
相关产品推荐
相关产品推荐

