首页 > 解决方案 > 如何检查用户是否已授权?

问题描述

在我网站的登录部分,为了让用户登录,他们的电子邮件需要得到确认。如果确认,则调用 SignInAsync 方法。

通常这会很好,但是“一般用户”无法访问网站的某些区域。所以我用

[Authorize(Roles ="Admin")]

首先是用户无法访问的所有控制器。我现在的问题是,如果用户输入他们无权访问的链接,因为 Authorize 属性需要具有管理员角色的用户才能登录。当普通用户尝试登录时,然后它只是刷新登录页面。我需要一种方法来检查用户是否已授权(未经过身份验证)但已授权,以便我可以显示适当的错误消息。这是我目前的代码:

if (ModelState.IsValid)
{
    var user = await UserManager.FindAsync(model.Email, model.Password);

    if (user != null)
    {
        if (user.EmailConfirmed == true)
        {
            //await SignInManager.SignInAsync(user, model.RememberMe); return RedirectToLocal(returnUrl);
            await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
        }
        else
        {
            ModelState.AddModelError("", "Confirm Email Address.");
            model.ErrorMessage = ("You need to confirm your email address in order to log in, please check yout emails");
            return View(model);
        }
    }
    else
    {
        ModelState.AddModelError("", "Invalid username or password.");
        model.ErrorMessage = "Username or password is incorrect"; 
        return View(model);
    }
}

我已经在网上寻找答案,但我发现的所有网站都有解决方案来检查用户是否经过身份验证(登录),而不是检查用户是否被授权,这就是我想要做的。

标签: asp.netasp.net-mvcasp.net-identity

解决方案


其他网站似乎检查用户是否通过身份验证与检查用户是否登录相同,但它也会检查用户是否具有正确定义的角色。例如“管理员”。因此,下面的代码


if (user.EmailConfirmed == true)
{
    if (USER.Identity.IsAuthenticated == true)
    {
        await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
    }
    else
    {
        ModelState.AddModelError("Authorization", "You are not authorized to access this section of the website");
    }

}

将检查用户的电子邮件是否已确认,以及他们是否有权检查页面的该部分,如果没有,则会显示错误消息。


推荐阅读