6

我使用我的 FB 凭据登录到我的应用程序。最后,我进行注销并删除我的会话变量。我已从应用程序中注销,但 FB 会话仍保持打开状态,尽管我在 FB 注销页面上发布了类似代码中的帖子:

if (Session["FBAccessToken"] != null){

  var fb = new Facebook.FacebookClient();
  string accessToken = Session["FBAccessToken"] as string;
  //var logoutUrl = fb.GetLogoutUrl(new { access_token = accessToken, next = "https://www.facebook.com/", });
  var logoutUrl = fb.GetLogoutUrl(new {  next = "https://www.facebook.com/", });

  fb.Post(logoutUrl.AbsoluteUri, new { access_token = accessToken });
  Session.RemoveAll();
}

我都尝试过:使用和不使用访问令牌参数生成的 logoutUrl,都不适合我。

4

2 回答 2

2

自从我上一篇博文以来,Facebook 注销发生了一些变化。这是注销的方法。

var fb = new FacebookClient();
var logoutUrl = fb.GetLogoutUrl(new {access_token = "...", next = "...." });

// redirect to logoutUrl.AbsoluteUri

下一个 url 不能是任意 url。我必须是您用来检索访问令牌的站点 url 的一部分。

于 2012-10-29T15:53:58.240 回答
0

@prabir 有答案。这是我为我的 MVC 应用程序调整它后的完整答案。只需将“localhost:51042/”替换为适合您应用的任何 URL。

这实际上填补了教程中的一个漏洞:http ://www.asp.net/mvc/overview/getting-started/using-oauth-providers-with-mvc

public ActionResult LogOff()
    {
        WebSecurity.Logout();

        if (Session["facebooktoken"] != null)
        {
            var fb = new Facebook.FacebookClient();
            var logoutUrl = fb.GetLogoutUrl(new { access_token = Session["facebooktoken"], next = "http://localhost:51042/" });

            Response.Redirect(logoutUrl.AbsoluteUri);
            Session.RemoveAll();
        } 

        return RedirectToAction("Index", "Home");
    }
于 2013-06-10T01:38:41.293 回答