AWS Cognito - 用户陷入CONFIRMED并且email_verified = false

use*_*403 16 amazon-cognito

如何查询确认已确认但email_verified为false的用户的电子邮件?

该场景大致是代理人代表他们注册用户,我通过管理员电话adminConfirmSignUp确认用户.此时,由于email_verified标志为false,用户无法更改其密码.

我无法调用resendConfirmationCode,因为用户已经确认.

我无法调用forgotPassword,因为email_verified标志为false.

我能想到的最好的方法是删除用户帐户并调用signUp(提示他们重新输入密码或新密码),从而重新创建帐户.

Lio*_*orH 22

使用AWS CLI,您可以更新email_verified属性:

aws cognito-idp admin-update-user-attributes 
--user-pool-id eu-west-xxxxxx 
--username xxxxyyyy@example.com
--user-attributes Name=email_verified,Value=true
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这种方法.它适用于我们的用例. (2认同)

ari*_*ing 15

您可以更改email_verified,phone_number_verified并通过调用其他属性adminUpdateUserAttributes没有任何lambda表达式和触发器:

'use strict'

var AWS = require('aws-sdk')

AWS.config.update({
  accessKeyId: 'YOUR_ACCESS_KEY_HERE',
  secretAccessKey: 'YOUR_SECRET_ACCESS_KEY_HERE',
  region: 'us-east-1' // change region if required
});

var CognitoIdentityServiceProvider = AWS.CognitoIdentityServiceProvider

var client = new CognitoIdentityServiceProvider({
  apiVersion: '2016-04-19',
  region: 'us-east-1' // change region if required
})

client.adminUpdateUserAttributes({
  UserAttributes: [{
      Name: 'phone_number_verified',
      Value: 'true'
    }, {
      Name: 'email_verified',
      Value: 'true'
    }
    // other user attributes like phone_number or email themselves, etc
  ],
  UserPoolId: 'COGNITO_USER_POOL_ID_HERE',
  Username: 'USERNAME'
}, function(err) {
  if (err) {
    console.log(err, err.stack)
  } else {
    console.log('Success!')
  }
})
Run Code Online (Sandbox Code Playgroud)


Jef*_*ley 9

目前,Cognito 不允许外部代理代表用户更新 email_verified 和 phone_verified 属性。将这些标记为真的唯一方法是通过可由最终用户完成的代码验证过程。例外情况是管理员级别的 API,如下面的答案所述,但不应从客户端完成。

过程是这样的:用户登录并获取访问令牌。然后,他们使用要验证的属性调用 GetUserAttrbuteVerificationCode API。这将向用户提供一个代码,可以通过调用 VerifyUserAttribute 来使用该代码,该代码将翻转属性为已验证。

  • 有没有计划让这个工作?[docs](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html) 表明可以在创建用户时将该标志设置为 true,并且控制台有点认为它已经过验证(它会显示“重置密码”按钮),但实际上尝试重置密码失败,并显示“未验证电子邮件”错误。通过电子邮件向他们发送临时密码,然后发送*另一*电子邮件以验证他们的电子邮件地址是否有效,这似乎有点愚蠢(并且对用户来说很痛苦)。 (5认同)
  • 更新:可以使用“AdminUpdateUserAttributes” API 将“email_verified”和“phone_number_verified”设置为“true”,请参阅[此](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/ APIReference/API_AdminUpdateUserAttributes.html)和[此](/sf/ask/2746225821/#43033722)。 (4认同)
  • 感谢您的回复,所以我认为如果用户丢失了密码并且我们处于 CONFIRMED email_verified = false 状态,我唯一能做的就是删除他们的帐户并重新创建它。 (2认同)

ifl*_*flp 7

现在,您可以编程设置email_verified使用预注册的λ触发与修改返回的事件为真event.response.autoVerifyEmail = true;

这不是在文档还没有,但在这个问题GitHub的引用。另请参阅使用cognito lambda触发器

  • 在与ExternalIdentityProvider链接后,我无法让它工作,我的用户和外部帐户电子邮件属性都未得到确认。 (3认同)