FBSDK令牌过期情况如何处理?

Posted

技术标签:

【中文标题】FBSDK令牌过期情况如何处理?【英文标题】:How to handle the FBSDK token expired case? 【发布时间】:2017-04-13 13:34:31 【问题描述】:

ios FBSDK 向我返回一个过期的令牌时,我不确定如何处理这种情况。在我的应用程序中,我在单击“登录”按钮时调用了以下方法。

FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions:@[@"public_profile", @"email", @"user_photos", @"user_birthday"]
             fromViewController:nil
                        handler: etc.... ]

这会触发一个 FBSDKAccessTokenDidChangeNotification,我正在处理这个方法如下:

- (void)fbAccessTokenDidChange:(NSNotification *)notification
 

  if ([notification.name isEqualToString:FBSDKAccessTokenDidChangeNotification]) 

    FBSDKAccessToken* oldToken = [notification.userInfo valueForKey: FBSDKAccessTokenChangeOldKey];
    FBSDKAccessToken* newToken = [notification.userInfo valueForKey: FBSDKAccessTokenChangeNewKey];

    NSLog(@"FB access token did change notification\nOLD token:\t%@\nNEW token:\t%@", oldToken.tokenString, newToken.tokenString);

    // initial token setup when user is logged in
    if (newToken != nil && oldToken == nil)
    
        NSDate *nowDate = [NSDate date];
        NSDate *fbExpirationDate = [FBSDKAccessToken currentAccessToken].expirationDate;

        if ([fbExpirationDate compare:nowDate] != NSOrderedDescending)
        
            NSLog(@"FB token: expired");
            if ([FBSDKAccessToken currentAccessToken])
            
                [[FBSDKLoginManager new] logOut];

                [[NSNotificationCenter defaultCenter] postNotificationName:@"fbTokenExpired" object:nil];
            
            return;
        

        [self storeFacebookToken];
    
    else if (newToken && oldToken && ![oldToken.tokenString isEqualToString:newToken.tokenString])
    
        NSLog(@"FB access token string did change");
        [self storeFacebookToken];
    

token过期了怎么办???我正在调用 [[FBSDKLoginManager new] logOut] ,它将当前令牌设置为 nil。但是,当我再次将用户重定向到登录按钮操作时,会出现相同的窗口,要求用户按“允许”。它不是要求用户输入他的密码和电子邮件,据我所知,这会成为一个新的令牌?我在哪里错过了重点?现在用户只是进入循环,永远不会登录......

非常感谢任何帮助!谢谢

【问题讨论】:

【参考方案1】:

在设备中的 Facebook 应用中注销。在模拟器中转到设置和 Facebook 注销

或 Safari 浏览器 facebook 登出

再次清理项目并运行。它会要求再次登录您的应用程序。

【讨论】:

Thnx 但这不是一个好的解决方案。我应该如何向用户展示这个?我需要以某种方式在幕后以编程方式执行此操作,而不是告诉用户去 fb 应用程序并注销...

以上是关于FBSDK令牌过期情况如何处理?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 Cognito 上的令牌过期问题

如何处理 Firebase 中过期的用户 ID 令牌?

如何处理 Quickblox 会话过期?

面试突击 002 | Redis 是如何处理已过期元素的?

Redis 面试宝典之 Redis 如何处理已经过期的数据?

Grpc令牌过期处理