清除服务器端的Facebook Web上下文



我已经使用Facebook Javascript SDK实现了客户端身份验证。我检查Application_AuthenticateRequest事件中的FacebookWeb上下文,以确定用户是否已登录,并相应地设置HttpCoontext.Current.user IPrincipal。

如果我从数据库中删除用户,我希望删除Facebook web上下文,以确保HttpContext.Current.user.IsAuthenticated为false。此外,如果用户取消对我的应用程序的授权,我想删除facebook的网络上下文。我不想让他们从facebook注销,只需删除facebook的网络上下文,这样会话就不会再经过身份验证了。

如何在服务器端执行此操作?

我找到的最好的方法是手动删除cookie fbsr_{你的应用程序id}。当然,这只能在用户与您的应用程序交互时进行。如果他们在facebook.com上删除了你的应用程序或以其他方式取消了它的授权,你将无法删除该cookie,直到他们下次访问你的应用。

以下是我在Facebook C#SDK中使用的一些代码:

string cookieName = "fbsr_" + FacebookApplication.Current.AppId;
if (Request.Cookies[cookieName] != null) {
   HttpCookie myCookie = new HttpCookie(cookieName);
   myCookie.Expires = DateTime.Now.AddDays(-1d);
   Response.Cookies.Add(myCookie);
}

每当我从Facebook收到OAuth异常,表明正在使用的用户访问令牌无效时,我都会这样做。然后我强制用户重新进行身份验证。

最新更新