如何解决AWS Amplify 'currentUserCredentials()' 返回意外的经过身份验证的值,错误?
在 Auth.signIn() 之后调用 Auth.currentUserCredentials() 时,我得到有效的有效凭据,但对于未经身份验证的用户,为什么?
代码:
async signIn({ dispatch,state },{ email,password }) {
try {
const user = await Auth.signIn(email,password);
console.log("User state after login")
const userCredentialsAfterLogin = await Auth.currentUserCredentials();
console.log(userCredentialsAfterLogin)
} catch (error) {
console.log("error")
console.log(error)
return
}
await dispatch('fetchUser')
},
预期行为:
使用有效用户登录后,Auth.currentUserCredentials() 应返回一组经过身份验证的凭据。
实际行为:
Auth.currentUserCredentials() 返回一个未经身份验证的用户,其身份验证属性设置为 false 和 400 错误,“ResourceNotFoundException: IdentityPool 'eu-west-1:62dab5ed-5a84-4064 -a7a2-87d1d0df511b'
系统:
- 身份验证流类型:“USER_SRP_AUTH”
- 版本:“aws-amplify”:“^3.3.14”,“aws-amplify-vue”:“^2.1.4”,放大版本 4.42.0
配置
{
"authSelections": "userPoolOnly","resourceName": "testapp89e81d50","serviceType": "imported","region": "eu-west-1"
}
解决方法
我了解您的想法,老实说,我无法向您展示明确的文档来确切说明为什么这不起作用。关于 Cognito 和 Amplify 的 AWS 文档很难拼凑在一起,因为 Amplify 框架仍然使用引擎盖下的旧库('amazon-cognito-identity-js'),而 Cognito 是连接登录的名称 - IAM 和注册/登录即服务产品。如果处理得当,Cognito 在安全性方面非常强大且坚如磐石,但设置有点麻烦。
有一些文档,例如Amplify Auth here 的 API 文档。您可以在那里看到 currentCredentials / currentUserCredentials 为您提供了一些 object,其中包含一个“identitiId”。凭据,在 Amplify Auth 框架中,是指引用 Cognito 身份的 AWS IAM 凭据。
您似乎正在使用 Amplify 使用电子邮件/密码登录 Cognito 用户池。 Cognito 用户池可以连接到 Cognito 识别池,以将 Cognito JWT 令牌“交换”为一些可用于使用 AWS 资源的凭证(IAM 凭证)。正常登录/注册流程不需要此操作。
那么,问题是:你想要什么?
-
您是否想了解当前登录的 Cognito 用户池用户,例如他的电子邮件、JWT 令牌和其他存储在 JWT 令牌中的字段?使用“currentUserInfo”或“currentUserSession”
-
您真的想要一些 IAM 凭证来调用 AWS 资源吗?确保创建 Cognito 用户池并将其与 Cognito 身份池连接,并在前端设置中配置身份池 ID。如果您已经这样做了,您应该可以使用“currentCredentials”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。