2015-03-18 1 views
0

В приложении пользователь может регистрироваться по электронной почте/паролю, Facebook или Twitter.Как вы определяете тип создания пользователя в Parse

Когда они создают учетную запись через Facebook, приложение устанавливает поле электронной почты в свою учетную запись Facebook. Это не относится к Twitter, потому что они не делятся с электронной почтой.

Проблемы возникают, когда пользователь, подписавшийся на Facebook, позже решает установить пароль.

Типичная форма смены пароля состоит из трех текстовых полей:

  • Текущий пароль
  • Новый пароль
  • Повторите новый пароль

Если пользователь был создан с помощью Facebook, то Объект PFUser не содержит пароль, известный пользователю. Поэтому во время смены пароля не может потребоваться поле текущего пароля.

Как узнать, был ли пользователь создан через Facebook/Twitter по электронной почте или паролю, поскольку в Parse нет метода проверки на наличие пустого пароля?

Просто проверить, связаны ли они с Facebook или Twitter, недостаточно, так как приложение также имеет возможность связывать и отключать Facebook или Twitter для аутентифицированной учетной записи.

ответ

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

0

Кажется, что все, что вы ищете, - это способ определить, является ли текущий пароль PFUser равным нулю. Вы можете сделать это, проверив, является ли результат последующего метода нулевым, и продолжайте использовать любой код.

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

В документации, поле пароля всегда будет пустым https://www.parse.com/docs/ios/api/Classes/PFUser.html#//api/name/password –