到目前为止,我们已使用以下语法检查了用户名和密码的登录凭据。
的 logInWithUsernameInBackground
的
[PFUser logInWithUsernameInBackground:[UsernameField.text lowercaseString] password:PasswordField.text block:^(PFUser* user, NSError* error){
但现在我的要求是:
用户必须使用电子邮件和用户名中的任何一个登录。
我们需要查看用户名/电子邮件和密码
如何实现这一目标?
答案 0 :(得分:16)
PFQuery *query = [PFUser query];
[query whereKey:@"email" equalTo:UsernameField.text];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error){
if (objects.count > 0) {
PFObject *object = [objects objectAtIndex:0];
NSString *username = [object objectForKey:@"username"];
[PFUser logInWithUsernameInBackground:username password:PasswordField.text block:^(PFUser* user, NSError* error){
}];
}else{
[PFUser logInWithUsernameInBackground: UsernameField.text password:PasswordField.text block:^(PFUser* user, NSError* error){
}];
}
}];
答案 1 :(得分:0)
快速3/4
Metin Say的回答转换为Swift。
static func signIn(username: String, password: String, onSuccess: @escaping ([PFObject]) -> (), onError: @escaping (String) -> ()) {
let query = PFQuery(className: "User")
query.whereKey("email", equalTo: username)
query.findObjectsInBackground(onSuccess: { (objects) in
if (objects.count > 0) {
guard let object = objects.first as? PFUser, let username = object.username else{
return
}
PFUser.logInWithUsername(inBackground: username, password: password) { (user, error) in
if let error = error {
onError(error.localizedDescription)
} else {
onSuccess(objects)
}
}
}
else{
PFUser.logInWithUsername(inBackground: username, password: password) { (user, error) in
if let error = error {
onError(error.localizedDescription)
} else {
onSuccess(objects)
}
}
}
}, onError(error.localizedDescription))
}