C# 如果用户未登录MVC,自定义登录页将覆盖返回URL
我有一个基于角色的自定义登陆C# 如果用户未登录MVC,自定义登录页将覆盖返回URL,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我有一个基于角色的自定义登陆 public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (!ModelState.IsValid) { return View(model); } var theLoggedInEmail = model.Email; var
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
var theLoggedInEmail = model.Email;
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
var user = await UserManager.FindAsync(model.Email, model.Password);
var roles = await UserManager.GetRolesAsync(user.Id);
if (roles.Contains("user"))
{
return RedirectToAction("Index", "Custom_dashboard", routeValues: new { id = User.Identity.GetUserId() });
//Send a mail to user to notify them of logging in
}
if (roles.Contains("Admin"))
{
return RedirectToAction("Index", "Admin_dashboard", routeValues: new { id = User.Identity.GetUserId() });
}
else
{
return RedirectToLocal(returnUrl);
}
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt. Please try again with correct email and password");
return View(model);
}
}
公共异步任务登录(LoginViewModel模型,字符串返回URL)
{
如果(!ModelState.IsValid)
{
返回视图(模型);
}
var theLoggedInEmail=model.Email;
var result=wait SignInManager.PasswordSignInAsync(model.Email、model.Password、model.RememberMe、shouldllockout:false);
开关(结果)
{
案例标志状态成功:
var user=await UserManager.FindAsync(model.Email,model.Password);
var roles=await UserManager.GetRolesAsync(user.Id);
if(roles.Contains(“用户”))
{
返回RedirectToAction(“Index”,“Custom_dashboard”,routeValue:new{id=User.Identity.GetUserId()});
//向用户发送邮件,通知他们登录
}
if(roles.Contains(“Admin”))
{
返回RedirectToAction(“Index”,“Admin_dashboard”,routeValue:new{id=User.Identity.GetUserId()});
}
其他的
{
返回重定向到本地(returnUrl);
}
案例标志状态锁定输出:
返回视图(“锁定”);
案例标志状态。要求验证:
return RedirectToAction(“SendCode”,new{ReturnUrl=ReturnUrl,RememberMe=model.RememberMe});
案例信号状态故障:
违约:
ModelState.AddModelError(“,”登录尝试无效。请使用正确的电子邮件和密码重试”);
返回视图(模型);
}
}
以及另一个模块,用于在用户登录时显示一些信息
查看页面
@if ( (User.Identity.IsAuthenticated) && (User.IsInRole("Employer")) ) {
[Information to be displayed...]
}
@if (User.Identity.IsAuthenticated == false)
{
<h4 class="text-center">
@Html.ActionLink("Login", "Login", "Account", new { @returnUrl = ViewContext.HttpContext.Request.Url.PathAndQuery }, null)
</h4>
}
@if((User.Identity.IsAuthenticated)和&(User.IsInRole(“雇主”)){
[要显示的信息…]
}
@if(User.Identity.IsAuthenticated==false)
{
@ActionLink(“登录”、“登录”、“帐户”,新建{@returnUrl=ViewContext.HttpContext.Request.Url.PathAndQuery},null)
}
如果用户未登录,系统将用户重定向到登录页面并验证该用户。如果成功,系统将显示视图,但会显示自定义登录页面
如果
returnURL
设置为您不想遵守的returnURL
,请将您的Login
路由更改为重定向到Login
路由(不带查询字符串),如何使其工作
然后,
returnURL
将被清除,它应该按照您想要的方式工作寻求调试帮助的问题(“为什么此代码不工作?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建一个最小、完整且可验证的示例。@DaImTo如果用户已登录,则在显示信息时可以正常工作,但如果用户未登录,则系统会将用户重定向到登录页面,登录后会显示自定义登录页,但我希望视图中显示的信息不是自定义登录页page@mjwills对只是为了看information@mjwillshttp://localhost:44257/Account/Login?ReturnUrl=%2FUser%2FDetails%2F61eb36a6-f083-4565-a9cc-b175838b0847
@mjwills非常感谢。我所做的是检查returnURL!=在检查角色的if条件内为null并返回RedirectToLocal(returnUrl)