【问题标题】:Parse invalid session token (Code: 209, Version: 1.7.1)解析无效会话令牌(代码:209,版本:1.7.1)
【发布时间】:2015-06-08 00:31:02
【问题描述】:

我刚刚更新了我的 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];
}

任何帮助将不胜感激。

【问题讨论】:

标签: ios objective-c facebook parse-platform facebook-sdk-4.0


【解决方案1】:

对于可撤销会话,如果从 Parse Cloud 中删除其对应的 Session 对象,您当前的会话令牌可能会变得无效。如果您实现了一个允许用户退出其他设备的会话管理器用户界面,或者如果您通过云代码、REST API 或数据浏览器手动删除会话,则可能会发生这种情况.由于自动过期(如果在应用程序设置中配置),会话也可能被删除。当设备的会话令牌不再与 Parse Cloud 上的会话对象对应时,来自该设备的所有 API 请求都将失败并显示“错误 209:会话令牌无效”。

【讨论】:

    【解决方案2】:

    我认为还需要执行一些步骤:

    1. 您必须在applicationDidBecomeActive 中添加[FBSDKAppEvents activateApp]

    2. 您应该在AppDelegate 中的didFinishLaunchingWithOptions 方法中写入
      return [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];

    尝试上述步骤应该对你有用。

    【讨论】:

      【解决方案3】:

      从模拟器或手机中删除该应用,然后重新构建并重新运行该应用。有时旧令牌会被缓存。我刚刚为我的应用解决了这个问题。

      【讨论】:

      • 这解决了我的问题,但后来又出现了
      • 救了我。 @user499846 你可能已经从 Parse 数据库中删除了数据。这可能是问题所在,这绝对是导致我的问题的原因。
      • 如果它是一个混合应用程序,您可以通过从本地存储中删除会话令牌来清除它
      【解决方案4】:

      发布的一些答案是临时修复 - 但是如果用户注销并尝试重新登录,问题可能会在以后再次出现 - 我认为这是由于我也允许匿名用户 - 我可以清除它的唯一方法就是在登录前调用[pfuser logout]

      【讨论】:

      • 这会导致匿名用户在创建帐户时丢失所有数据,对吧?
      【解决方案5】:

      查看此页面:https://parse.com/tutorials/session-migration-tutorial

      您的应用很可能正在使用旧会话令牌。您可以在设置应用 ID 和客户端密钥后立即将其添加到您的应用委托,从而迁移到可撤销的会话令牌。

          [PFUser enableRevocableSessionInBackground];
      

      Parse 的网站上有一个关于处理此错误的部分,可能对您有更多帮助:https://www.parse.com/docs/ios_guide#sessions-handleerror/iOS

      【讨论】:

      • 我遇到了同样的问题。发生这种情况时,在用户登录之前,它不允许您进行任何解析调用。您必须禁用可撤销帐户,然后调用 ParseUser.LoginAsync(username, pass);登录后,我删除了代码,它可以在用户再次登录之前调用解析。
      • 这对我有用 --> PFUser.enableRevocableSessionInBackground()
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 2018-11-10
      • 1970-01-01
      相关资源
      最近更新 更多