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)| 归档时间: |
|
| 查看次数: |
4851 次 |
| 最近记录: |