在应用程序中,用户可以通过电子邮件/密码,Facebook或Twitter注册。
当他们通过Facebook创建帐户时,应用程序会将电子邮件字段设置为他们的Facebook帐户。 Twitter的情况并非如此,因为他们不共享电子邮件。
当用户注册Facebook后,决定设置密码时会出现问题。
典型的密码更改表单包含三个文本字段:
如果用户是通过Facebook创建的,则PFUser对象不包含用户已知的密码。因此,在密码更改期间不能要求当前密码字段。
如何判断用户是否是通过Facebook / Twitter与电子邮件/密码创建的,因为Parse中没有方法可以检查空密码?
仅仅检查它们是否与Facebook或Twitter链接是不够的,因为该应用程序还可以选择链接和取消链接Facebook或Twitter以获取经过身份验证的帐户。
答案 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)。