解析无效会话令牌(代码:209,版本:1.7.1)
Parse invalid session token (Code: 209, Version: 1.7.1)
我刚刚更新了我的 Parse 和 Facebook SDK(分别为 1.7.1 和 4.0)——我可能会补充说这两个都非常痛苦!
然而,当我尝试使用 Facebook 登录时,我现在收到 209 错误。
这是我的代码示例:
- (void)loginWithFacebook:(HMSuccessBlock)completion{
NSArray *permissionsArray = @[@"user_about_me",@"user_location",@"user_friends",@"user_relationships"];
// Login PFUser using Facebook
[PFFacebookUtils logInInBackgroundWithReadPermissions:permissionsArray block:^(PFUser *user, NSError *error) {
if (!user) {
NSLog(@"Uh oh. The user cancelled the Facebook login.");
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Log In Error"
message:error.localizedDescription
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:@"Dismiss", nil];
[alert show];
completion(NO, error);
} else if (user.isNew) {
NSLog(@"User signed up and logged in through Facebook!");
if (completion) {
completion(YES, nil);
}
} else {
NSLog(@"User logged in through Facebook!");
completion(YES, nil);
}
}];
}
产生以下[错误]:会话令牌无效(代码:209,版本:1.7.1)
我最初的想法是,这个问题与我在应用程序委托中的代码有关——在旧版本的 facebooksdk 上,我将应用以下代码
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [FBAppCall handleOpenURL:url
sourceApplication:sourceApplication
withSession:[PFFacebookUtils session]];
}
但是我似乎找不到任何可以在更新版本中复制它的东西,因此我的代码是
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
如有任何帮助,我们将不胜感激。
查看此页面:https://parse.com/tutorials/session-migration-tutorial
您的应用很可能使用的是旧版会话令牌。您可以在设置应用程序 ID 和客户端密钥后立即将其添加到您的应用程序委托,从而迁移到可撤销会话令牌。
[PFUser enableRevocableSessionInBackground];
Parse 的网站上有一个关于处理此错误的部分,可能对您更有帮助:https://www.parse.com/docs/ios_guide#sessions-handleerror/iOS
从模拟器或您的 phone 中删除应用程序,然后重建并重新运行 应用程序。有时旧令牌会被缓存。我刚刚为我的应用程序解决了这个问题。
我认为还需要执行一些步骤:
您必须在applicationDidBecomeActive
中添加[FBSDKAppEvents activateApp]
。
你应该写
return [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
在方法 didFinishLaunchingWithOptions
中 AppDelegate
.
尝试上述步骤应该适合您。
发布的一些答案是临时修复 - 但是如果用户注销并尝试重新登录,问题可能会在以后再次出现 - 我认为这是因为我也允许匿名用户 - 这是我唯一可以做到的清除它是在登录之前调用 [pfuser logout]
对于可撤销的会话,如果从 Parse Cloud 中删除其相应的会话对象,您当前的会话令牌可能会变得无效。如果您实施 允许用户从其他设备注销 的会话管理器 UI,或者如果您 手动删除 会话,则可能会发生这种情况通过 Cloud Code、REST API 或数据浏览器。会话也可能由于自动过期而被删除(如果在应用程序设置中配置)。当设备的会话令牌不再对应于 Parse Cloud 上的会话对象时,来自该设备的所有 API 请求都将失败,并显示“错误 209:会话令牌无效”。
我刚刚更新了我的 Parse 和 Facebook SDK(分别为 1.7.1 和 4.0)——我可能会补充说这两个都非常痛苦!
然而,当我尝试使用 Facebook 登录时,我现在收到 209 错误。
这是我的代码示例:
- (void)loginWithFacebook:(HMSuccessBlock)completion{
NSArray *permissionsArray = @[@"user_about_me",@"user_location",@"user_friends",@"user_relationships"];
// Login PFUser using Facebook
[PFFacebookUtils logInInBackgroundWithReadPermissions:permissionsArray block:^(PFUser *user, NSError *error) {
if (!user) {
NSLog(@"Uh oh. The user cancelled the Facebook login.");
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Log In Error"
message:error.localizedDescription
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:@"Dismiss", nil];
[alert show];
completion(NO, error);
} else if (user.isNew) {
NSLog(@"User signed up and logged in through Facebook!");
if (completion) {
completion(YES, nil);
}
} else {
NSLog(@"User logged in through Facebook!");
completion(YES, nil);
}
}];
}
产生以下[错误]:会话令牌无效(代码:209,版本:1.7.1)
我最初的想法是,这个问题与我在应用程序委托中的代码有关——在旧版本的 facebooksdk 上,我将应用以下代码
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [FBAppCall handleOpenURL:url
sourceApplication:sourceApplication
withSession:[PFFacebookUtils session]];
}
但是我似乎找不到任何可以在更新版本中复制它的东西,因此我的代码是
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
如有任何帮助,我们将不胜感激。
查看此页面:https://parse.com/tutorials/session-migration-tutorial
您的应用很可能使用的是旧版会话令牌。您可以在设置应用程序 ID 和客户端密钥后立即将其添加到您的应用程序委托,从而迁移到可撤销会话令牌。
[PFUser enableRevocableSessionInBackground];
Parse 的网站上有一个关于处理此错误的部分,可能对您更有帮助:https://www.parse.com/docs/ios_guide#sessions-handleerror/iOS
从模拟器或您的 phone 中删除应用程序,然后重建并重新运行 应用程序。有时旧令牌会被缓存。我刚刚为我的应用程序解决了这个问题。
我认为还需要执行一些步骤:
您必须在
applicationDidBecomeActive
中添加[FBSDKAppEvents activateApp]
。你应该写
return [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
在方法didFinishLaunchingWithOptions
中AppDelegate
.
尝试上述步骤应该适合您。
发布的一些答案是临时修复 - 但是如果用户注销并尝试重新登录,问题可能会在以后再次出现 - 我认为这是因为我也允许匿名用户 - 这是我唯一可以做到的清除它是在登录之前调用 [pfuser logout]
对于可撤销的会话,如果从 Parse Cloud 中删除其相应的会话对象,您当前的会话令牌可能会变得无效。如果您实施 允许用户从其他设备注销 的会话管理器 UI,或者如果您 手动删除 会话,则可能会发生这种情况通过 Cloud Code、REST API 或数据浏览器。会话也可能由于自动过期而被删除(如果在应用程序设置中配置)。当设备的会话令牌不再对应于 Parse Cloud 上的会话对象时,来自该设备的所有 API 请求都将失败,并显示“错误 209:会话令牌无效”。