这是我的登录代码,问题发生在用户登录后重定向到"Profile"。
protected void UserLogin_Click(object sender, EventArgs e)
{
if (IsValid)
{
var manager = new IdentityModels.UserManager();
IdentityModels.User user = manager.Find(Username.Text, Password.Text);
if (user != null)
{
if (isUserActive(user.PatientId)=="isNotActive")
{
lblError.Text =
"you are no longer active. Please contact your local clinic to find out why.";
return;
}
if (isUserActive(user.PatientId) == "clinicNotActive")
{
lblError.Text =
"Your clinic is no longer active. Please contact your local clinic to find out why.";
return;
}
IdentityModels.IdentityHelper.SignIn(manager, user, RememberMe.Checked);
if (manager.IsInRole(user.Id,"Administrator") || manager.IsInRole(user.Id,"Staff") || manager.IsInRole(user.Id,"Physician"))
{
Response.Redirect("Dashboard");
}
if (Request.QueryString["Profile"] != null)
{
IdentityModels.IdentityHelper.RedirectToReturnUrl(Request.QueryString["Profile"], Response);
}
else
{
Response.Redirect("Profile");
}
}
else
{
ModelState.AddModelError("", "Invalid username or password");
lblError.Text = "Invalid username or password";
}
}
}
这是我在配置文件页面上的页面加载代码:
var manager = new IdentityModels.UserManager();
IdentityModels.User user = manager.FindById(HttpContext.Current.User.Identity.GetUserId());
if (user == null)
{
var ex = new Exception("patient was null, BUT TRIED SIGNING IN NOW" + UserAccess.GetUserId().ToString());
Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
Response.Redirect("Login");
}
Elmah日志显示异常"patient为null,但尝试立即登录0"。
所以,如果我的用户成功登录,他们一定是因为他们正在访问配置文件页面,那么为什么他们中的一些人会遇到这个错误。为什么用户为null?
我只是不明白,为什么它会影响一些而不是全部。当我重新发布网站时,所有用户都可以登录几分钟,有时几小时,然后它就会重新启动。
尝试使用User.Identity
而不是HttpContext.Current.User.Identity
。我见过一些上下文(基于ASP.NET的会话)与Identity的令牌不同步的情况。
好了,伙计们,这是答案。
将会话状态从InProc更改为SQLServer,登录重定向已经22个小时了,这是以前从未发生过的,所以我认为可以肯定地说,问题已经解决,这就是答案。