如何使用Swift中的Cognito用户池注册用户并验证其电话号码?

时间:2016-07-17 01:49:32

标签: ios swift amazon-web-services amazon-cognito

到目前为止,我只能在目标c的AWS文档中找到如何执行此操作,而不是swift。我使用以下代码在swift中成功在用户池中创建用户:

let userPool = AWSCognitoIdentityUserPool(forKey: "myApp")

var name = AWSCognitoIdentityUserAttributeType()
name.name = "name"
name.value = nameEntry.text

var phone = AWSCognitoIdentityUserAttributeType()
phone.name = "phone_number"
phone.value = "+1" + phoneNumberEntry.text!

var email = AWSCognitoIdentityUserAttributeType()
email.name = "email"
email.value = emailEntry.text

userPool.signUp("goats", password: passwordEntry.text!, userAttributes: [name, phone, email], validationData: nil)

执行上述代码会按预期在Cognito用户池中创建用户。

此外,上述代码成功地将验证码发送到提供的电话号码。但是,我无法成功将此验证码传回AWS并验证电话号码。在用户池中创建用户后,我尝试了以下两行,这两行都没有更改要验证的电话号码:

user.verifyAttribute("phone_number", code: verificationEntry.text!)
user.confirmSignUp(verificationEntry.text!)

在用户注册后,我将用户变量设置为以下内容:

self.user = userPool.getUser()

这些都不起作用,AWS的客观c文档没有帮助。关于如何验证用户电话号码的任何想法?感谢

4 个答案:

答案 0 :(得分:1)

您应该使用userPool.getUser(username: String),而不是userPool.getUser()

在你的情况下:

self.user = userPool.getUser(nameEntry.text)

否则,您可能会收到以下错误。

[Debug] AWSURLResponseSerialization.m line:63 | -[AWSJSONResponseSerializer responseObjectForResponse:originalRequest:currentRequest:data:error:] | Response body:
{"__type":"InvalidParameterException","message":"2 validation errors detected: Value at 'username' failed to satisfy constraint: Member must have length greater than or equal to 1; Value at 'username' failed to satisfy constraint: Member must satisfy regular expression pattern: [\\p{L}\\p{M}\\p{S}\\p{N}\\p{P}]+"}

答案 1 :(得分:0)

注册后,您应该致电确认注册以确认用户并标记电话/电子邮件(您获取代码的地方)。

您可以让用户确认该属性是否已标记为已验证。

P.S。:如果您遇到问题,请告诉我您的用户池ID,用户名和注册时间框架。

答案 2 :(得分:0)

您需要指定向其发送验证码的用户。所以使用带有用户名的getUser()。然后你打电话给confirmSignUp()。

答案 3 :(得分:0)

 @IBAction func confirmButtonPressed(_ sender: AnyObject) {
    if confirmationCodeTextField.text != nil {
        let pool = AWSCognitoIdentityUserPool(forKey: "UserPool")
        let user: AWSCognitoIdentityUser = pool.getUser("userName")
        user.confirmSignUp(confirmationCodeTextField.text!).continue(with: AWSExecutor.mainThread(), withSuccessBlock: { (task: AWSTask<AWSCognitoIdentityUserConfirmSignUpResponse>) -> Any? in

            if task.error != nil {
                // Error
            } else {
                // handle the success response
            }
            return nil
        })
    } else {
        // Ask user to enter the confirmation code.
    }
}

上述方法可帮助您确认用户注册。在获取用户时,您必须指定&#34;用户名&#34;。此代码以 swift 3 编写。