【发布时间】:2015-09-30 18:45:44
【问题描述】:
如果用户不是管理员角色,我正在尝试插入 AccountController 中的默认 switch 语句并将用户重定向到“未授权”页面。
默认代码
// 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);
}
如果我从帐户/登录开始,这一切正常,但如果我的 URL 附加了 ReturnURL,我无法将其重定向到未授权页面。
例如,我有一个如下所示的管理控制器。
[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,我看不到我缺少什么。
【问题讨论】:
-
return View 不会重定向,returnurl 只是一个查询字符串,也不会影响重定向。我无法理解您的问题
-
好的,如果我在 Account/Login 中进入登录页面并且我没有“Admin”角色,我的 switch 语句将检查角色并到达
return View("NotAuthorized");部分的代码。然后,我将进入 NotAuthorized 页面(视图)。如果我尝试相同的操作,但已从另一个页面重定向到帐户/登录(现在我附加了 returnURL),我将不会进入 NotAuthorized 页面,即使它仍然在我的开关中达到相同的代码return View("NotAuthorized");声明。
标签: c# asp.net-mvc asp.net-identity