如何在Parse中确定用户创建类型

时间:2015-03-18 15:22:04

标签: ios parse-platform passwords pfuser

在应用程序中,用户可以通过电子邮件/密码,Facebook或Twitter注册。

当他们通过Facebook创建帐户时,应用程序会将电子邮件字段设置为他们的Facebook帐户。 Twitter的情况并非如此,因为他们不共享电子邮件。

当用户注册Facebook后,决定设置密码时会出现问题。

典型的密码更改表单包含三个文本字段:

  • 当前密码
  • 新密码
  • 重复新密码

如果用户是通过Facebook创建的,则PFUser对象不包含用户已知的密码。因此,在密码更改期间不能要求当前密码字段。

如何判断用户是否是通过Facebook / Twitter与电子邮件/密码创建的,因为Parse中没有方法可以检查空密码?

仅仅检查它们是否与Facebook或Twitter链接是不够的,因为该应用程序还可以选择链接和取消链接Facebook或Twitter以获取经过身份验证的帐户。

2 个答案:

答案 0 :(得分:0)

似乎您正在寻找的是一种确定当前PFUser密码是否为零的方法。您可以通过检查follow方法的结果是否为nil来执行此操作,然后继续使用您需要的任何代码。

if ([[PFUser currentUser] objectForKey:@"password"] == nil)

答案 1 :(得分:0)

我找到了解决这个问题的方法,这在我的特定情况下有效。

当用户使用电子邮件/密码注册时,我有:

signupViewController.signUpView.emailAsUsername = YES;

根据文档,这会将用户名和电子邮件设置为新创建的PFUser上的相同值。

然而,即使使用此设置,当Facebook或Twitter是第一次登录时,Parse会设置用户名'用户对象到哈希的字段。

这意味着Facebook和Twitter登录的用户名不是有效的电子邮件,这意味着用户从未设置过密码。

我通过在PFSubclassing PFUser类中添加以下方法来实现这一目的:

-(BOOL)hasPassword
{
    //isValidEmail is from a custom NSString category
    if([self.username isValidEmail])
    {
        //they created their account with a username/password
        return YES;
    }
    else
    {
        //they created their account with Facebook or Twitter
        return NO;
    }   

}

此解决方案还需要在设置密码时将用户名更改为电子邮件。这是必需的,以便在下次更改密码时,使用旧密码'将被要求。

不是最优雅的解决方案,但适用于当前版本的Parse Framework(v1.6.2)。