验证码总是无效的 Swift Parse

Posted

技术标签:

【中文标题】验证码总是无效的 Swift Parse【英文标题】:Verification code always invalid Swift Parse 【发布时间】:2015-12-14 23:02:23 【问题描述】:

我正在使用短信验证来验证用户。我的问题是,当我输入代码以验证时,我得到了无效代码。我一辈子都想不通为什么。

调用云代码函数:

@IBAction func verifyCodeButtonTapped(sender: AnyObject) 
    var verificationCode: String = verificationCodeTextField.text!
    let textFieldText = verificationCodeTextField.text ?? ""

    if verificationCode.utf16.count < 4 || verificationCode.utf16.count > 4 
        displayAlert("Error", message: "You must entert the 4 digit verification code sent yo your phone")
     else 
        let params = ["verificationCode" : textFieldText]
        PFCloud.callFunctionInBackground("verifyPhoneNumber", withParameters: params, block:  (object: AnyObject?, error) -> Void in
            if error == nil 
                self.performSegueWithIdentifier("showVerifyCodeView", sender: self)
             else 
                self.displayAlert("Sorry", message: "We couldnt verify you. Please check that you enterd the correct 4 digit code sent to your phone")
            
        )
    

云码验证码:

Parse.Cloud.define("verifyPhoneNumber", function(request, response) 
    var user = Parse.User.current();
    var verificationCode = user.get("phoneVerificationCode");
    if (verificationCode == request.params.phoneVerificationCode) 
        user.set("phoneNumber", request.params.phoneNumber);
        user.save();
        response.success("Success");
     else 
        response.error("Invalid verification code.");
    
);

【问题讨论】:

为什么需要使用 .utf16? x &lt; 4 || x &gt; 4 也可以写成 x != 4。另外,您没有向我们展示验证码发送部分。 【参考方案1】:

您的参数名称在 ios 和 JS 代码之间不匹配。

verificationCodephoneVerificationCode

改变

let params = ["verificationCode" : textFieldText]

要使用相同的参数名称:

let params = ["phoneVerificationCode" : textFieldText]

编辑

我在代码中看到的其他问题:

iOS 代码的前两行根据 textField 的文本值创建一个变量和一个常量。去掉verificationCode 变量,只使用textFieldText 常量。

在您检查代码是否等效之前,我会在云代码中添加更多错误状态。首先检查参数是否存在以及预期的类型和长度:

var requestCode = request.params.phoneVerificationCode;
if ((typeof requestCode !== "string") || (requestCode.length !== 4)) 
  // The verification code did not come through from the client

然后对来自用户对象的值执行相同的检查:

else if ((typeof verificationCode !== "string) || (verificationCode.length !== 4)) 
  // There is not a verification code on the Parse User

然后你可以继续检查requestCodeverificationCode是否等价。

【讨论】:

我改变了它,但仍然得到无效的代码!不过很好! @m1234 我已经编辑了我的答案,以添加我在原始问题中的示例代码中看到的更多问题。 感谢我已根据您的建议更新了我的代码,但我仍然收到无效代码

以上是关于验证码总是无效的 Swift Parse的主要内容,如果未能解决你的问题,请参考以下文章

创建新应用时出现 Instagram 验证码错误

饿了么商家版账号密码正确怎么显示验证码无效?

为啥输入验证码总是错误啊

为啥输入的验证码明明对了,系统却总是显示:输入的验证码错误?

h5短信验证码自动填充时总是被复制两遍

手机验证码常见漏洞总结