0

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

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

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

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

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

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

由于 Parse 中没有检查空密码的方法,我如何判断用户是通过 Facebook/Twitter 还是电子邮件/密码创建的?

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

4

2 回答 2

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)。

于 2015-03-19T19:12:33.383 回答
0

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

if ([[PFUser currentUser] objectForKey:@"password"] == nil)
于 2015-03-18T16:17:52.333 回答