MVC5身份/ OWIN - 注销事件

时间:2014-03-22 00:10:44

标签: asp.net-mvc authentication asp.net-mvc-5 asp.net-identity owin

如何检测所有可能的SignOuts?当手动,超时和任何其他可能的方式进行SignOut时,有没有办法获得一些事件?

我需要知道用户身份验证何时结束,就像我知道它在调用SingIn时启动一样。

我使用内部帐户和外部帐户(如Facebook)。

1 个答案:

答案 0 :(得分:0)

我需要一个可以在用户已经过身份验证时初始化用户会话的位置。下面是应该完成工作的代码,我完全不喜欢它。我需要检查每个请求的会话,以确保会话中的标志已经加载并为当前用户加载。

将来该标志可能是DB的一整类属性。

无法相信没有更好的方法来检测用户何时签名/退出。

我所做的是:

void Session_Start(object sender, EventArgs e)
{
    InitializeSession_Authenticated();
}

protected void Application_AcquireRequestState(Object sender, EventArgs e)
{
    InitializeSession_Authenticated();
}

private void InitializeSession_Authenticated()
{
    if (HttpContext.Current.Session == null)
        return;
    if (!System.Threading.Thread.CurrentPrincipal.Identity.IsAuthenticated)
        return;

    string userName = System.Threading.Thread.CurrentPrincipal.Identity.Name;
    if (HttpContext.Current.Session[SESSION_VAR.USER_ISINITIALIZED] == null || 
        HttpContext.Current.Session[SESSION_VAR.USER_NAMEFORSESSION] != userName)
    {
        HttpContext.Current.Session[SESSION_VAR.USER_NAMEFORSESSION] = userName;
        HttpContext.Current.Session[SESSION_VAR.USER_ISINITIALIZED] = GetFlagFromDB(userName);
    }
}
编辑:@Shoe谢谢:P ...