iOS解析验证用户

iOS解析验证用户,ios,objective-c,parse-platform,pfuser,Ios,Objective C,Parse Platform,Pfuser,我想在AppDelegate.m中编写代码,检查PFUser.currentUser凭据是否仍然有效。我这样做的原因就是为了这个场景。假设用户已成功登录,并且现在currentUser已拥有该用户的基本信息。如果用户在应用程序启动时更改了密码,则应检查这些凭据是否是最新的。如果电子邮件和密码与表中的不匹配,则应注销用户 我试图这样做,但显然PFUser.currentUser.password总是设置为null,而PFUser.currentUser.email具有用于登录的电子邮件的实际值。如

我想在AppDelegate.m中编写代码,检查
PFUser.currentUser
凭据是否仍然有效。我这样做的原因就是为了这个场景。假设用户已成功登录,并且现在currentUser已拥有该用户的基本信息。如果用户在应用程序启动时更改了密码,则应检查这些凭据是否是最新的。如果电子邮件和密码与表中的不匹配,则应注销用户

我试图这样做,但显然
PFUser.currentUser.password
总是设置为null,而
PFUser.currentUser.email
具有用于登录的电子邮件的实际值。如何在不访问密码的情况下实现此验证

以下是我的指导代码:

PFQuery *query = [PFQuery queryWithClassName:@"User"];
[query whereKey:@"objectId" equalTo: PFUser.currentUser.objectId];
[query whereKey:@"password" equalTo: PFUser.currentUser.password];
[query getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) {

        if (!object) {
            /*Credentials changed! Logout user and request login again*/
            NSLog(@"Credentials Changed!");
            [PFUser logOut];
            [[[navigationController viewControllers] objectAtIndex:0] performSegueWithIdentifier:@"loginSegue" sender:self];
        } 
        else {
            /*Credentials are still valid..proceed!*/
            NSLog(@"Credentials Correct!");
            [[[navigationController viewControllers] objectAtIndex:0] performSegueWithIdentifier:@"skipLoginSegue" sender:self];
        }
    }];

当这失败时,我试图记录密码,结果为空,所以我明白这就是问题所在

我将使用主密钥编写一个云代码函数:
Parse.cloud.useMasterKey()

当你在你的函数中包含这个时,你将能够访问/检查用户的密码并发回一个“已验证”的变量或类似的东西

这里是我的云代码函数,用于修改用户,但您可以轻松地修改它以验证用户的信息。在解析论坛上也有很多关于这个问题的答案,文档中也有很多信息

Parse.Cloud.define("editUser", function(request, response) {
  //var GameScore = Parse.Object.extend("SchoolHappening");
  // Create a new instance of that class.
  //var gameScore = new GameScore();
Parse.Cloud.useMasterKey();

  var query = new Parse.Query(Parse.User);
query.get(request.params.myUser, {
  success: function(myUser) {
    // The object was retrieved successfully.
    myUser.set("cabinetPosition", request.params.myPosition);
    // Save the user.
      myUser.save(null, {
        success: function(myUser) {
          // The user was saved successfully.
          response.success("Successfully updated user.");
        },
        error: function(gameScore, error) {
          // The save failed.
          // error is a Parse.Error with an error code and description.
          response.error("Could not save changes to user.");
        }
      });

  },
  error: function(object, error) {
    // The object was not retrieved successfully.
    // error is a Parse.Error with an error code and description.
  }
});

});

如果要验证当前密码,可以在本地存储密码,然后使用
loginWithUsernameInBackground:
进行验证。大概

[PFUser logInWithUsernameInBackground:[PFUser currentUser].username
                             password:password
                                block:^(PFUser *user, NSError *error) {
}];

PFuser不保存密码。如果我的答案帮助您,请标记为正确。任何可以提供此方法指导的示例代码为什么我们不尝试再次登录用户,如果失败,请注销用户?