我有一个可以检查当前会话是否有效的应用程序。因此,如果您在另一部手机上更改了密码,则在您打开该应用程序时,它将使您退出其他手机。因此,如果有一个会话令牌缓存到[PFUser currentUser]中,我想使用该令牌成为InBackground,并且如果它返回错误,则该会话无效,我们应该注销,否则它是有效的,并且我们有一个新的sessionToken。当我运行此代码时,我没有收到任何错误,并且为用户返回.sessionToken(为空)

NSLog(@"Current Token: %@", [PFUser currentUser].sessionToken);

if ([PFUser currentUser].sessionToken) {
    [PFUser becomeInBackground:[PFUser currentUser].sessionToken block:^(PFUser * _Nullable user, NSError * _Nullable error) {
        if (error) {
            NSLog(@"%@", error);
        } else {
            NSLog(@"Returned User Token: %@", user.sessionToken);
        }
    }];
}


这回来

Current Token: r:36ff500b036c041a37h9bab21f308741
Returned User Token: (null)


它正在删除currentUser sessionToken!我拥有最新的Parse SDK(1.12.0),我也不知道为什么要对我这样做。

最佳答案

我相信这是在您指示ParseSDK成为其他用户时发生的,如果它与当前用户相同(即您的会话有效),则看起来不起作用。

我对会话检查的处理有些不同。相反,我刷新用户,然后捕获所有错误并检查无效的会话。这很好用:)

[[PFUser currentUser] fetchInBackgroundWithBlock:^(PFObject *object, NSError *error) {
    if (error) {
        NSLog(@"Error refreshing user %@", error.localizedDescription);

        // check if the session token is invalid... force a logout!
        if ([error.domain isEqualToString:PFParseErrorDomain] && error.code == kPFErrorInvalidSessionToken) {
            dispatch_async(dispatch_get_main_queue(), ^{
                [PFUser logOut];

                // Show your login screen or whatever here
            });
        }

        return;
    }
}];

10-06 06:28