将身份与自定义 属性 结合使用

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