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

How do you determine User creation type in Parse

在应用程序中,用户可以通过 email/password、Facebook 或 Twitter 注册。

当他们通过 Facebook 创建帐户时,该应用会将电子邮件字段设置为他们的 Facebook 帐户。 Twitter 不是这样,因为他们不共享电子邮件。

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

典型的密码更改表单由三个文本字段组成:

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

我如何判断用户是通过 Facebook/Twitter 还是通过 email/password 创建的,因为 Parse 中没有检查空密码的方法?

仅仅检查他们是否link使用 Facebook 或 Twitter 是不够的,因为该应用程序还可以选择 link 和取消 link Facebook 或 Twitter 进行身份验证帐号。

看来您正在寻找的只是一种确定当前 PFUser 的密码是否为 nil 的方法。您可以通过检查 follow 方法的结果是否为 nil 并继续执行您需要的任何代码来做到这一点。

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

我找到了一种解决此问题的方法,适用于我的特定情况。

当用户使用 email/password 注册时,我有:

signupViewController.signUpView.emailAsUsername = YES;

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

然而,即使使用此设置,当 Facebook 或 Twitter 是首次登录时,Parse 也会将用户对象的 'username' 字段设置为散列。

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

我通过在 class 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;
    }   

}

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

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