验证程序和创建新用户逻辑,parse.com

The verification Procedure and making new users logic, parse.com

我对如何思考何时创建新的匿名用户感到困惑。这就是我的应用程序现在的设置方式。

我得到了三个 ViewController。

1) GetPhoneController, 2) VerificationController , 3) ViewController

GetPhoneController: 是第一个视图,如果打开应用程序的用户没有存储用户意思 [PFUser currentUser]; 等于 NULL 那么这个视图将是 运行 否则 ViewController 将执行(检查在 AppDelegate 中完成)。这个视图只会在 UITextField 中获取用户的 phone 号码,并发送到下一个控制器

VerificationController: 打开此视图时,会向用户发送一条带有 VerificationCode 的文本消息。我正在使用带有解析的 Twilio。验证码保存在用户对象的自定义字段中,用于稍后匹配代码。(这里的问题稍后你会知道为什么)。

检查是否用户输入了正确的验证码,如果用户输入了正确的验证码,那么我希望创建匿名用户并转到下一个控制器。为什么?因为如果我在他被验证之前创建一个用户,那么在一个场景中,用户可能会关闭应用程序,然后一个用户被创建为没有占用额外的 space。

所以我的问题是我试图将验证码保存给一个不存在的用户,因为我想在验证后创建它。

如果您有更好的解决方案来改进验证逻辑步骤,那么这个问题的解决方案会很棒甚至更好。

此外,我从不注销用户,因为我不希望用户在验证完成后登录,这也意味着匿名用户将被删除,这是不好还是可以使用那?

谢谢!

如果您不想在验证完成之前在 Parse 中创建用户,您可以将验证令牌保存到 NSUserDefaults

在VerificationController中发送验证码的方法中...

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:verificationCode forKey:@"code"];
[defaults synchronize];

然后,检查用户何时输入代码并点击按钮...

- (void)userTappedCheckCodeButton:(id)sender {
  NSString *enteredCode = codeField.text;
  NSString *storedCode = [[NSUserDefaults standardUserDefaults] objectForKey:@"code"];
  if ([enteredCode isEqualToString:storedCode]) {
    // Code matches. Create your anonymous user as the code has been verified.
  } else {
    // No code match. Tell the user, or maybe ask if they want to send the code again.
  }
}

--- 使用代码生成发生在服务器端的新信息进行编辑 ---

如果您真的不想创建用户,直到他们被验证并且代码生成发生在服务器端,您可以使用在 Parse 中创建一个新的 VerificationToken 对象。您可以通过 [[NSUUID UUID] UUIDString] 为用户设备生成一个标识符,并存储在 NSUserDefaults 中(这样,您就不需要使用广告标识符,并且它在应用程序执行过程中是持久的)。随请求发送该 UUID 以生成代码并将其发送给用户,并使用您的云代码功能将其保存在验证对象中。

VerificationController 上,只需发送带有您从 NSUserDefaults 检索到的 UUID 的代码,搜索匹配该 VerificationToken 的对象,return 成功,并创建匿名用户。

最后,如果您担心有数千个未完成的 VerificationToken 对象使 Parse 混乱,只需告诉用户它们只持续 24 小时,并创建一个计划的云代码作业来删除所有VerificationToken 个日期早于 1 天的 createdAt 个对象,并将任务安排为每天 运行。