确认用Amazon Web Services帐户创建后一个未经证实的用户(在应用程序)
我在AWS:如果你创建一个用户帐户,离开应用程序,并在回去使用发送代码到电子邮件以确认一个可怕的问题/ SMS,那么它会说你输入的用户名必须大于1个字符,并且必须遵循某种模式。这是amazon发布的示例代码中的一个错误。我在这里发帖,因为有人的话题没有文献,我想我的发布解决方案,工作,因为这是一个非常令人沮丧的问题。确认用Amazon Web Services帐户创建后一个未经证实的用户(在应用程序)
这里的错误:在“用户名”
值不能满足约束:成员的长度必须大于或等于1;在 '用户名' 值不能满足约束:成员必须满足正则表达式模式:[\ p {L} \ p {M} \ p {S} \ p {N} \ p {P}] +“;
值在“用户名”不能满足约束:成员的长度必须大于或等于1;在“用户名”值不能满足约束:成员必须满足正则表达式模式:[\ p {L} \ p {M} \ p {S} \ p {N} \ p {p}] +“;
当您最初创建一个帐户,你会被带到哪里,你必须输入用户名和密码的确认用户故事板。但是用户名已经输入,因为您在技术上使用未经确认的帐户登录。然而这是唯一一次,您将能够登录在未确认的帐户(除非你发现周围的一些其他工作)。因此,如果要继续回到确认用户控制器,他们不能简单地输入用户名,因为代码使用登录用户的用户名,而不是输入的用户名。以下是如何解决该问题,以便您可以简单地输入用户名和代码,然后确认帐户。
这是我在堆栈的第一篇文章所以这里是我最好的答案:
的方法...
override func viewDidLoad() {
变化......
self.username.text = self.user!.username
到....
if self.user?.username == "" || self.user == nil {
print("user is nil")
} else {
self.username.text = self.user!.username
}
....并插入以下内容与您的poolID和@IBAction中的“确认”方法和您自己的SEGUE;插入后,您检查,看看是否码值是空的,之前“self.user?.confirmSignUp”的方法...
if self.user?.username == "" || self.user == nil {
// change the poolid to yours
let pool = AWSCognitoIdentityUserPool(fenter code hereorKey: userPoolID)
// change the "username" title to whatever corresponds to the text field identifier you are using
let user = pool.getUser((self.username?.text)!)
user.confirmSignUp(self.code.text!, forceAliasCreation: true).continueWith {[weak self] (task: AWSTask) -> AnyObject? in
guard let strongSelf = self else { return nil }
DispatchQueue.main.async(execute: {
if let error = task.error as? NSError {
let alertController = UIAlertController(title: error.userInfo["__type"] as? String, message: error.userInfo["message"] as? String, preferredStyle: .alert)
let okAction = UIAlertAction(title: "Ok", style: .default, handler: nil)
alertController.addAction(okAction)
strongSelf.present(alertController, animated: true, completion: nil)
} else {
// Change the segue identifier to yours
strongSelf.performSegue(withIdentifier: "confirmedUserSegue", sender:sender)
}
})
return nil
}
}
希望这有助于!
要解决重新发送代码,做同样的事情:
if self.user?.username == "" || self.user == nil {
let pool = AWSCognitoIdentityUserPool(forKey: userPoolID)
let user = pool.getUser((self.username?.text)!)
user.resendConfirmationCode().continueWith {[weak self] (task: AWSTask) -> AnyObject? in
guard let _ = self else { return nil }
DispatchQueue.main.async(execute: {
if let error = task.error as? NSError {
let alertController = UIAlertController(title: error.userInfo["__type"] as? String,
message: error.userInfo["message"] as? String,
preferredStyle: .alert)
let okAction = UIAlertAction(title: "Ok", style: .default, handler: nil)
alertController.addAction(okAction)
self?.present(alertController, animated: true, completion: nil)
} else if let result = task.result {
let alertController = UIAlertController(title: "Code Resent",
message: "Code resent to \(result.codeDeliveryDetails?.destination!)",
preferredStyle: .alert)
let okAction = UIAlertAction(title: "Ok", style: .default, handler: nil)
alertController.addAction(okAction)
self?.present(alertController, animated: true, completion: nil)
}
})
return nil
}
} else
...其余的代码从亚马逊例如else语句...