我有一个可以检查当前会话是否有效的应用程序。因此,如果您在另一部手机上更改了密码,则在您打开该应用程序时,它将使您退出其他手机。因此,如果有一个会话令牌缓存到[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;
}
}];