我已经使用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异常,表明正在使用的用户访问令牌无效时,我都会这样做。然后我强制用户重新进行身份验证。