AWS Cognito身份验证未按预期工作

时间:2019-01-17 05:04:36

标签: javascript amazon-web-services vue.js aws-sdk amazon-cognito

我正在尝试遵循docs通过我的登录表单对用户进行身份验证。用例4说这是用于验证用户的身份,但是我仍然收到用户未验证的错误,因此感到困惑。

我可以成功调用authenticateUser函数并获得令牌并重定向到另一个页面,但是当该页面调用getUserAttributes时,我收到用户未登录的错误。

login.vue

const userPool = new CognitoUserPool(cognitoConfig)

  const authenticationData = {
    Username: this.username,
    Password: this.password
  }

  const authenticationDetails = new AuthenticationDetails(authenticationData)

  const userData = {
    Username: this.username,
    Pool: userPool
  }
  const user = new CognitoUser(userData)
  const self = this

  user.authenticateUser(authenticationDetails, {
    onSuccess: result => {
      const token = result.getAccessToken().getJwtToken()
      console.log('token = ', token)
      self.$store.commit('user/SET_USERNAME', self.username)
      self.$router.push('/dashboard')
    },
    onFailure: err => {
      console.log('err = ', err)
    }
  })

dashboard.vue

const userPool = new CognitoUserPool(cognitoConfig)
const userData = {
  Username: this.user.username,
  Pool: userPool
}

console.log('userData = ', userData)

const user = new CognitoUser(userData)
user.getUserAttributes((err, result) => {
  if (err) {
    console.log('getUserAttributes err = ', err)
    alert(err.message || JSON.stringify(err))
    return
  }
  for (let i = 0; i < result.length; i++) {
    console.log('attribute ' + result[i].getName() + ' has value ' + result[i].getValue())
  }
})

1 个答案:

答案 0 :(得分:0)

在dashboard.vue中,您正在创建一个未通过身份验证的新用户实例。尝试在autheticateUser之后尝试getUserAttributes。

原因是,当您调用authenticateUser时,成功后,一些属性将被设置到调用用户实例,令牌,签名等...

然后,当您调用另一个方法(如getUserAttributes)时,它将使用该信息。

您在dashboard.vue中的代码失败,因为在您调用该方法时,未验证用户实例,因为您可以从错误消息中进行读取。

您需要验证所有用户实例。