2

在 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"
}
4

1 回答 1

2

我了解您来自哪里,老实说,我无法真正向您展示清晰的文档来准确说明为什么这不起作用。关于 Cognito 和 Amplify 的 AWS 文档很难拼凑起来,因为 Amplify 框架在底层仍然使用旧库(“amazon-cognito-identity-js”),而 Cognito 是两个连接登录的名称 - IAM 和注册/登录即服务产品。如果操作正确,Cognito 在安全性方面非常强大且坚如磐石,但设置有点麻烦。

这里有一些文档,例如 Amplify Auth 的 API 文档。您可以在那里看到 currentCredentials / currentUserCredentials 为您提供了一些对象,其中包含“identitiId”。在 Amplify Auth 框架中,凭证指的是指代 Cognito 身份的 AWS IAM 凭证。

您似乎正在使用 Amplify 使用电子邮件/密码登录到 Cognito 用户池。Cognito 用户池可以连接到 Cognito 识别池,以“交换” Cognito JWT 令牌以获得可用于使用 AWS 资源的某些凭证(IAM 凭证)。但是,正常的登录/注册流程不需要这样做。

所以,问题是:你想要什么?

  1. 您想了解当前登录的 Cognito 用户池用户,例如他的电子邮件、JWT 令牌和存储在 JWT 令牌中的其他字段吗?使用“currentUserInfo”或“currentUserSession”

  2. 您真的想要一些 IAM 凭证来调用 AWS 资源吗?确保创建 Cognito 用户池并将其与 Cognito 身份池连接,并在前端设置中配置您的身份池 ID。如果你这样做了,你应该能够使用'currentCredentials'。

于 2021-02-14T12:39:56.283 回答