AWS lambda 无服务器网站会话维护
Posted
技术标签:
【中文标题】AWS lambda 无服务器网站会话维护【英文标题】:AWS lambda serverless website session maintaining 【发布时间】:2017-05-30 19:38:45 【问题描述】:我使用 node.js 作为后端开发了一个网站。 最近我正在尝试使其无服务器并部署到 lambda。 我将重写我的大部分代码,但还没有弄清楚如何在用户登录后维护会话。我使用的是“express-session”模块,会话数据都记录在数据库中。
说实话,我对会话的理解不是很深。 我在谷歌上搜索并没有找到我需要的东西。 有没有人有一些关于使用 lambda 维护会话的示例代码? 或任何资源。非常感谢!
【问题讨论】:
【参考方案1】:在Amazon Cognito Identity SDK for javascript 中,特别检查用例16,它显示了如何检索Cognito 当前用户。您可以使用此函数在页面之间传递当前用户属性。
var poolData =
UserPoolId : '...', // Your user pool id here
ClientId : '...' // Your client id here
;
var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData);
var cognitoUser = userPool.getCurrentUser();
if (cognitoUser != null)
cognitoUser.getSession(function(err, session)
if (err)
alert(err);
return;
console.log('session validity: ' + session.isValid());
// other AWS actions ...
);
【讨论】:
【参考方案2】:HTTP 中有多种机制可用于维护会话 Web 应用程序中的状态,例如 cookie(标准 HTTP 标头), URL 参数,GET 请求的 URL 参数,POST 的正文参数 请求,例如隐藏的表单字段(html 表单)或专有 HTTP 标题。
来源:Session Management Cheat Sheet
AWS Lambda 与会话管理无关,除非您想重新发明***并编写 Lambda 函数来存储/检索数据库中的会话变量,在这种情况下,我建议您使用 Amazon Cognito 进行会话管理。见Amazon Cognito Identity SDK for JavaScript。
【讨论】:
我很困惑的一件事是,如果您想使用匿名用户并在 oauth 流中存储一个“状态”字符串怎么办。 Cognito 是否为此矫枉过正?例如此处的步骤 2-4:jsapi.apiary.io/apis/starlingbankapi/reference/0/customer-api/… @timhc22 在这种特殊情况下,我不认为 Cognito 是正确的选择。就个人而言,我会使用 localStorage 直到我需要对用户进行身份验证/注册。【参考方案3】:无论您使用 Cognito 还是您自己的会话管理方式,请注意 lambda 调用 share their runtime 并在它们之间共享静态状态。确保您的设计考虑到这一事实并相应地构建您的会话共享。
https://www.linkedin.com/pulse/does-lambda-call-share-any-commonstate-santhosh-gandhe/
【讨论】:
以上是关于AWS lambda 无服务器网站会话维护的主要内容,如果未能解决你的问题,请参考以下文章
AWS Lambda&Fargate 无服务底层技术是如何实现的
无服务器/AWS-Lambda 设置的 graphiql UI 损坏