我在webforms应用程序中使用Asp.Net Identity。我想要实现的是检查数据库中是否有用户IsActive
如果是真的登录并且是否显示错误消息。如果我设置断点并检查IsActive
值,那么它与数据库中的完全相同。 “我的数据库”列的数据类型为Bit
。我遇到的问题是我无法向最终用户显示错误消息。我的代码在
if (IsValid)
{
var manager = new UserManager();
ApplicationUser user = manager.Find(UserName.Text, Password.Text);
string userId = User.Identity.GetUserId();
if (user != null && user.IsActive == true)
{
IdentityHelper.SignIn(manager, user, RememberMe.Checked);
Response.Redirect("~/SecurePage.aspx"); //Redirect to a different page once user has logged in
if(user.IsActive == false)
{
FailureText.Text = "Sorry you no longer have access"; //This error message never displays
ErrorMessage.Visible = true;
}
}
else
{
FailureText.Text = "Invalid username or password."; //This message displays even when user is not active
ErrorMessage.Visible = true;
}
}
如果用户未处于活动状态,则他们无法登录哪些有效,但会显示错误的错误消息。我认为这可能是我的if
逻辑。有人可以告诉我,我在哪里出错。
答案 0 :(得分:1)
您的if(user.IsActive == false)
检查无法访问,因为您在检查之前正在重定向用户。将此if子句移出父if-block:
if (user != null && user.IsActive == true)
{
IdentityHelper.SignIn(manager, user, RememberMe.Checked);
Response.Redirect("~/SecurePage.aspx"); //Redirect to a different page once user has logged in
}
else if(user != null && user.IsActive == false)
{
FailureText.Text = "Sorry you no longer have access";
ErrorMessage.Visible = true;
}
else
{
FailureText.Text = "Invalid username or password."; //This message displays even when user is not active
ErrorMessage.Visible = true;
}
答案 1 :(得分:1)
此代码的问题是语句if(user.IsActive == false)
将从不执行,因为第一个if
语句仅在用户处于活动状态时才为真。您需要稍微调整一下代码才能使其正常工作。
if (user != null)
{
if (user.IsActive)
{
IdentityHelper.SignIn(manager, user, RememberMe.Checked);
Response.Redirect("~/SecurePage.aspx"); //Redirect to a different page once user has logged in
}
else
{
FailureText.Text = "Sorry you no longer have access"; //This error message never displays
ErrorMessage.Visible = true;
}
}
另请注意,我已将user.IsActive == true
更改为user.IsActive
。在bool
语句条件下,以这种方式将if
与true进行比较是多余的。
答案 2 :(得分:1)
Response.Redirect("~/SecurePage.aspx");
将重定向到另一个页面,并且将终止当前页面的执行。因此Response.Redirect
之后的代码不会被执行。
您可以将其移至else
:
if(user.IsActive == false)
{
FailureText.Text = "Sorry you no longer have access"; //This error message never displays
ErrorMessage.Visible = true;
}
else
Response.Redirect("~/SecurePage.aspx"); //Redirect to a different page once user has logged in