ASP.net中的Global OnLoggedIn事件?

Ian*_*oyd 5 asp.net forms-authentication stay-logged-in

有没有办法在用户登录ASP.net网站时收到通知?

注意:用户无需访问"登录页面"即可登录.如果存在"记住我"cookie,他们可以点击任意页面并登录.

当用户登录时,我想获取一些与会话相关的信息.

注意:有Login.LoggedIn活动.问题是每个页面上都不存在该控件; 它出现在(Login.aspx)上的一个页面不会调用OnLoggedIn事件.

Global.asax具有全局On Session Start通知的方式相同:

void Session_Start(object sender, EventArgs e) 
{
}
Run Code Online (Sandbox Code Playgroud)

我假设有一个用户登录的通知:

void LoggedIn(object sender, EventArgs e)
{
}
Run Code Online (Sandbox Code Playgroud)

奖金阅读

小智 7

我认为你没有一个独特的地方可以做到这一点.在我的情况下(MVC + log4net)我使用这个:

  • Global.asax我使用预先存在的cookie检查经过身份验证的用户.

    protected void Session_Start()
    {
        string ip = HttpContext.Current.Request.UserHostAddress;
    
        log.InfoFormat("Starting session: {0} from {1}.",Session.SessionID, ip);
    
        if ((HttpContext.Current != null) &&
            (HttpContext.Current.User != null) &&
            (HttpContext.Current.User.Identity.IsAuthenticated) )
        {
            string user = HttpContext.Current.User.Identity.Name;
            string type = "Cookie";
    
            log.InfoFormat("User {0} logged in with {1}.", user, type);
        }
    
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 在我的帐户控制器中,我检查本地登录(我正在使用来自MVC4的Internet应用程序模板,但Login.OnLoggedIn如果您使用的是Web表单,则可以在此处执行此操作)

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Login(LoginModel model, string returnUrl)
    {
        if (ModelState.IsValid && WebSecurity.Login(model.EMail, model.Password, persistCookie: model.RememberMe))
        {
            string user = model.EMail;
            string type = "Forms";
    
            log.InfoFormat("User {0} logged in with {1}.", user, type);
    
            return RedirectToLocal(returnUrl);
        }
    
        // If we got this far, something failed, redisplay form
        ModelState.AddModelError("", "The user name or password provided is incorrect.");
        log.ErrorFormat("Bad password or user name. User={0}", model.EMail, model.Password);
        return View(model);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 但我也需要检查OAuth登录,如下所示:

    [AllowAnonymous]
    public ActionResult ExternalLoginCallback(string returnUrl)
    {
        AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));
        if (!result.IsSuccessful)
        {
            log.Debug("External login failure.");
    
            return RedirectToAction("ExternalLoginFailure");
        }
    
        if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
        {
            log.InfoFormat("User {0} logged in with External {1} login. External UserID = {2}",
                Membership.GetUser(OAuthWebSecurity.GetUserName(result.Provider, result.ProviderUserId)).UserName,
                result.Provider,
                result.ProviderUserId);
    
            return RedirectToLocal(returnUrl);
        }
    
        ...
    }
    
    Run Code Online (Sandbox Code Playgroud)