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,我不知道我错过了什么。
您没有做重定向。您告诉它为Login操作使用NotAuthorized视图。要重定向,请使用RedirectToAction()。
return RedirectToAction("NotAuthorized");
如果您还没有帐户控制器,则需要在帐户控制器中添加NotAuthorized操作。
[AllowAnonymous]
public ActionResult NotAuthorized()
{
return View();
}