ASP.NET身份-未经授权的页面

本文关键字:授权 NET 身份 ASP | 更新日期: 2023-09-27 18:15:16

我正试图插入AccountController中的默认开关语句,并将用户重定向到"未授权"页面,如果他们不在Admin角色中。

<<p> 默认代码/strong>
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }
    var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
    switch (result)
    {
        case SignInStatus.Success:
            return RedirectToLocal(returnUrl);
        case SignInStatus.LockedOut:
            return View("Lockout");
        case SignInStatus.RequiresVerification:
            return RedirectToAction("SendCode", new { ReturnUrl = returnUrl });
        case SignInStatus.Failure:
            default:
                ModelState.AddModelError("", "Invalid login attempt.");
                return View(model);
    }
}

这是我想添加到SignInStatus的内容。switch语句

成功案例
switch (result)
    {
        case SignInStatus.Success:
        //After successful login - check if the user is not in the admin role
            if (!UserManager.IsInRole(user.Id, "Admin"))
            {
                //Send to the Not Authorized page
                return View("NotAuthorized");
            }
            //Successful login with admin role
            else
            {
                //Return to where they came from 
                return RedirectToLocal(returnUrl);
            }
        case SignInStatus.LockedOut:
            //Lockout settings in IdentityConfig.cs
            return View("Lockout");
        case SignInStatus.RequiresVerification:
            return RedirectToAction("SendCode", new { ReturnUrl = returnUrl });
        case SignInStatus.Failure:
        default:
            ModelState.AddModelError("", "Invalid login attempt.");
                return View(model);
        }

这一切都很好,如果我开始在帐户/登录,但如果我的URL有一个ReturnURL附加,我不能让它重定向到未授权的页面。

例如,我有一个Admin控制器,看起来像这样。

[Authorize(Roles = "Admin")]
public class AdminController : Controller
{
    // GET: Admin
    public ActionResult Index()
    {
        return View();
    }
}

如果我尝试直接进入该管理页面,当没有登录时,我的页面将重定向到帐户/登录和URL将看起来像这个http://localhost:51250/Account/Login?ReturnUrl=%2FAdmin这就是在登录期间重定向到NotAuthorized将无法工作的地方。如果我的URL看起来像这样http://localhost:51250/Account/Login,重定向到NotAuthorized 工作。

在执行switch语句时,它应该忽略返回URL,我不知道我错过了什么。

ASP.NET身份-未经授权的页面

您没有做重定向。您告诉它为Login操作使用NotAuthorized视图。要重定向,请使用RedirectToAction()。

return RedirectToAction("NotAuthorized");

如果您还没有帐户控制器,则需要在帐户控制器中添加NotAuthorized操作。

[AllowAnonymous]
public ActionResult NotAuthorized()
{
    return View();
}