2017-10-20 183 views
0

我在AWS:如果你创建一个用户帐户,离开应用程序,并在回去使用发送代码到电子邮件以确认一个可怕的问题/ SMS,那么它会说你输入的用户名必须大于1个字符,并且必须遵循某种模式。这是amazon发布的示例代码中的一个错误。我在这里发帖,因为有人的话题没有文献,我想我的发布解决方案,工作,因为这是一个非常令人沮丧的问题。确认用Amazon Web Services帐户创建后一个未经证实的用户(在应用程序)

这里的错误:在“用户名”

值不能满足约束:成员的长度必须大于或等于1;在 '用户名' 值不能满足约束:成员必须满足正则表达式模式:[\ p {L} \ p {M} \ p {S} \ p {N} \ p {P}] +“;

回答

0

值在“用户名”不能满足约束:成员的长度必须大于或等于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语句...

相关问题