gpt4 book ai didi

amazon-web-services - 通过链接进行 Cognito 无密码身份验证

转载 作者:行者123 更新时间:2023-12-03 16:51:45 25 4
gpt4 key购买 nike

我正在尝试通过没有密码的链接实现身份验证。例如。用户输入他的电子邮件 -> cognito 发送一封带有用户可以单击并登录的链接的电子邮件。它

Cognito 通过自定义挑战支持它。例如。 https://aws-amplify.github.io/amplify-js/media/authentication_guide#using-a-custom-challenge

我已创建 DefineAuthChallenge , CreateAuthChallenge , VerifyAuthChallenge与我的认知池相关联的 lambda 函数。 CreateAuthChallenge生成发送到用户电子邮件和站点链接的代码。

接下来我计划从网站上的 url 中获取该代码并通过它像在文档中一样登录用户

Auth.signIn(username)
.then(user => {
if (user.challengeName === 'CUSTOM_CHALLENGE') {
Auth.sendCustomChallengeAnswer(user, challengeResponse)
.then(user => console.log(user))
.catch(err => console.log(err));
} else {
console.log(user);
}
})
.catch(err => console.log(err));

但问题就在这里。 Auth.sendCustomChallengeAnswer需要从 Auth.signIn 传递的用户对象.但是,如果用户只是单击电子邮件中的链接,则根本不会有任何用户对象。并且放大 lib 不保存该中间 session 用户对象,因此在页面重新加载时丢失了。仅当身份验证完成到其存储时才会保存 https://github.com/aws-amplify/amplify-js/blob/master/packages/amazon-cognito-identity-js/src/CognitoUser.js#L175

所以问题是我如何从 Auth.signIn 保存和重建用户对象页面重新加载功能。或者是否有更好的方法通过链接登录而无需密码?

最佳答案

要首先解决这个问题,您需要将用户名和 session 保存到 localstorage 或 cookie 中。然后当用户通过链接时,可以使用此代码:

 const userPoolData = {
UserPoolId: process.env.COGNITO_POOL_ID,
ClientId: process.env.COGNITO_POOL_WEB_CLIENT_ID,
Storage: customStorageClass // default is localstorage
}

const userPool = new CognitoUserPool(userPoolData)

const userData = {
Username: getUsernameFromCookiesOrLocalstorage,
Pool: userPool,
Storage: customStorageClass // default is localstorage
}
const user = new CognitoUser(userData)
user.Session = getSessionFromCookiesOrLocalstorage
Auth.sendCustomChallengeAnswer(user, code)

关于amazon-web-services - 通过链接进行 Cognito 无密码身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52787498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com