在 AWSCognitoIdentityProvider iOS Swift 库中,要通过短信或电子邮件重新发送验证码,需要一个用户对象,该对象是通过调用用户池的 SignUp 方法检索的。成功调用 SignUp 方法后,将返回 AWSCognitoIdentityUser 类型的用户对象。要重新发送新的验证码,可以在该用户对象上调用以下两种方法之一:
var pool: AWSCognitoIdentityUserPool?
override func viewDidLoad() {
super.viewDidLoad()
self.pool = AWSCognitoIdentityUserPool.init(forKey:
AWSCognitoUserPoolsSignInProviderKey)
}
...
AWSCognitoIdentityUser.getAttributeVerificationCode("email")
// or
AWSCognitoIdentityUser.resendConfirmationCode()
但24小时后,如果未使用验证码将账户设置为“已确认”状态,则验证码默认失效,需要重新输入验证码。如果用户关闭 iPhone 应用程序,我无法检索用户的 AWSCognitoIdentityUser 对象以便向他们重新发送另一个验证码。用户无法登录以检索用户的对象,因为 UNCONFIRMED 帐户无法登录。尝试使用 SignUp 方法重新注册失败,因为该帐户已存在。
如何获取 UNCONFIRMED 账户 AWSCognitoIdentityUser 对象以便重新发送新的验证码?
最佳答案
此问题自 2016 年 5 月 23 日以来一直处于开放状态,并且似乎仍然处于开放状态。请参阅aws/amazon-cognito-identity-js Issue #42中讨论的确切问题。在 github 上。
根据上面的问题讨论,解决方法可能是不在 Cognito 用户池中使用电子邮件别名,而是需要用户名来避免别名问题,从而导致返回错误的异常(未找到用户)并因此没有信号表明该帐户存在并且处于未确认状态。我仍然不确定这是否会启用一种方法来返回用于重新发送新验证码的用户账户的 AWSCognitoIdentityUser 对象,但我会尝试此解决方法并报告。
编辑:
发现您可以对特定用户帐户使用 getSession 。没有记录表明它需要密码。您可以使用“deadbeef”作为密码,它仍然可以获得该用户的对象。一旦检索到,即使用户未经确认,也可以发送新的验证码。建议在调用注册之前执行此操作,以检查用户是否存在、是否有权拉取用户、资源是否可用、用户是否未经确认(如果是这种情况,我会自动发送另一个验证,因为我使用 e -邮件验证链接)等
关于iphone - 如何获取 UNCONFIRMED 账户的 AWSCognitoIdentityUser 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48716097/