如何使用Parse.com实现使用电子邮件地址或用户名登录?

时间:2013-08-28 10:22:47

标签: iphone ios objective-c parse-platform

到目前为止,我们已使用以下语法检查了用户名和密码的登录凭据。

logInWithUsernameInBackground

 [PFUser logInWithUsernameInBackground:[UsernameField.text lowercaseString] password:PasswordField.text block:^(PFUser* user, NSError* error){

但现在我的要求是:

用户必须使用电子邮件和用户名中的任何一个登录。

我们需要查看用户名/电子邮件和密码

如何实现这一目标?

2 个答案:

答案 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))
    }