将身份与自定义 属性 结合使用
Using Identity with custom property
我在 webforms 应用程序中使用 Asp.Net Identity。我想要实现的是检查数据库,如果用户 IsActive
如果 true 登录并且 false 显示错误消息。如果我设置断点并检查 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
逻辑。谁能告诉我哪里错了。
您对 if(user.IsActive == false)
的检查无法访问,因为您在检查之前重定向了用户。将此 if 子句移出父 if 块:
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;
}
这段代码的问题是语句 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
。在 if
语句条件中,以这种方式将 bool
与 true 进行比较是多余的。
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
我在 webforms 应用程序中使用 Asp.Net Identity。我想要实现的是检查数据库,如果用户 IsActive
如果 true 登录并且 false 显示错误消息。如果我设置断点并检查 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
逻辑。谁能告诉我哪里错了。
您对 if(user.IsActive == false)
的检查无法访问,因为您在检查之前重定向了用户。将此 if 子句移出父 if 块:
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;
}
这段代码的问题是语句 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
。在 if
语句条件中,以这种方式将 bool
与 true 进行比较是多余的。
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