我试图插入AccountController中的默认switch语句,并将用户重定向到" Not Authorized"页面,如果他们不在管理员角色。
默认代码
// 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);
}
}
以下是我尝试添加到switch语句 SignInStatus.Success 的情况
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);
}
如果我从帐户/登录开始,这一切都正常,但如果我的网址附有ReturnURL,我就无法将其重定向到“未授权”页面。
例如,我有一个看起来像这样的Admin控制器。
[Authorize(Roles = "Admin")]
public class AdminController : Controller
{
// GET: Admin
public ActionResult Index()
{
return View();
}
}
如果我尝试直接转到该管理员页面,则在未登录时,我的页面将重定向到帐户/登录,并且网址将如下所示http://localhost:51250/Account/Login?ReturnUrl=%2FAdmin
这是在登录赢得工作期间重定向到NotAuthorized的位置。如果我的网址如此http://localhost:51250/Account/Login
,则重定向到NotAuthorized 将工作。
在浏览我的switch语句时应忽略返回网址,我不会看到我错过的内容。
答案 0 :(得分:2)
您没有进行重定向。您告诉它使用NotAuthorized视图进行Login操作。要进行重定向,请使用RedirectToAction()。
return RedirectToAction("NotAuthorized");
如果您还没有NotAuthorized操作,则需要在帐户控制器中添加。
[AllowAnonymous]
public ActionResult NotAuthorized()
{
return View();
}