【问题标题】:Error validating access token: The session is invalid because the user logged out验证访问令牌时出错:会话无效,因为用户已注销
【发布时间】:2011-09-04 06:18:17
【问题描述】:

我的代码:

 var fbWebContext = FacebookWebContext.Current;
 if (fbWebContext.IsAuthorized())
 {
      var fb = new FacebookWebClient(fbWebContext);
      dynamic result = fb.Get("/me");

      name.Text = result.name;
 }

 dynamic result = fb.Get("/me");

抛出:

(OAuthException) 验证访问令牌时出错:会话无效,因为用户已注销。

我应该如何更改我的代码以防止这种情况发生?

【问题讨论】:

    标签: c# .net facebook exception-handling facebook-c#-sdk


    【解决方案1】:

    你真的无法阻止它,你只需要捕获异常并处理它。好吧,您可以通过从 FB Javascript SDK 执行一些等效调用来检测错误会话(过期、注销、用户更改密码等)并让他们再次登录,从而在客户端阻止它。调用服务器端代码之前的客户端。

    如果您查看 Facebook C# SDK 源代码,您会发现 IsAuthorized() = IsAuthenticated()。 IsAuthenticated 所做的只是检查您是否有一个 Session,以及 Session 的到期时间是否还没有过去。会话可能因用户在服务器不知情的情况下注销而失效。

    您也可以在此处获取其他 Facebook OAuth 例外情况。最好将上述代码包装在 try/catch 中,并通过重新提示用户登录并与他们进行新会话来处理异常。

    【讨论】:

      【解决方案2】:

      CanvasAnthorizer 对象呢?这个对象不能确保用户已登录并具有正确的权限吗?

      【讨论】:

      • 用户仍有可能在另一个浏览器选项卡上注销 FB,从而使应用程序使用的选项卡上的访问令牌无效。我已经测试过这个场景,它确实会导致上述 OAuth 异常。
      • 在这种情况下你在做什么?即使用户重新登录,我也会遇到这个问题,即使我在他重新登录后重新启动应用程序
      • 我会抛出一些小的警告消息框,提醒他们注意问题并提示他们再次登录。这取决于他们是否会回到我的应用程序页面之一。一些用户从我的应用程序收到电子邮件,如果他们有令牌/OAuth 问题,我会在电子邮件顶部添加注释。您需要引起他们的注意并给他们一个按钮,点击该按钮将获得新的会话/令牌。
      【解决方案3】:

      您可以请求“offline_access”扩展权限。这将阻止此消息,并且用户不必每次都登录。

      【讨论】:

      • offline_access 现已弃用,将于 2012 年 5 月前被删除。
      • @wize,还有其他选择吗?
      • @jeremy-patrick:是的,Facebook 的标准方式是重新认证。如何做到这一点取决于您使用的客户端平台。我的客户端平台是 Android,这意味着只要访问令牌过期,我就必须在 Facebook Android SDK 上调用授权。 Facebook有official info on their webpage
      猜你喜欢
      • 2013-10-22
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多