AuthenticationManager 无法注销用户的问题
最近遇到一个很诡异的问题,在最近的一个新项目中,发现在 MVC5 下,偶尔会出现登陆的用户无法注销的问题,经检查发现AuthenticationManager.SignOut()
执行之后并没有删除 Cookie,手动删除 Cookie 之后,该功能又正常了,又能正常登陆、注销了。前面几次出现这个问题我都是手动删除 Cookie,发现恢复了之后,我也就没在意。
刚刚又出现这个问题,我怒了,决定 Google 下。Google 了一番之后,发现这个问题还挺普遍,但是都没有什么好的答案。后来看到有人说,用AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie)
可以解决这个问题,一试,还真解决了。可是官方的例子里并没有传这个参数,而且我以前的几个站点,都是用的官方例子里的AuthenticationManager.SignOut()
,而且都没有出现这个问题。百思不得其解,好挫折。不弄清楚睡不着觉。于是又继续搜,终于发现了一个帖子,https://aspnetidentity.codeplex.com/workitem/2347。
当初这个问题应该是发生在 Microsoft.AspNet.Identity 2.0/2.1 rc + Microsoft.Owin.3.0 rc 版中,我以前项目用的 Identity2.2 + Owin 3.0 中,应该是没有这个问题。最近刚更新的 Identity2.3 + Owin 3.0.1 中,又有了这个问题。
哈哈!突然感觉我已经走在 MVC 的前沿了。记下这个问题,为今后遇到这个问题的朋友们排忧解难!
解决方案就是,在 LogOff 方法里,用AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie)
就行了。
当然,我这个项目并没有用到第三方登陆,如果用到了第三方登陆,可能还需要添加AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
。