[英]How to redirect after authentication with MVC5 views
我有一个MVC5
项目和一个Razor
视图,该视图向人们显示他们的登录名。 我想做的是给人们“ 我不是”选项,以其他用户身份登录,然后将其重定向回该视图。
这是我目前所拥有的:
@if (Request.IsAuthenticated)
{
<div class="alert alert-dismissable alert-warning">
You are signed in as: @HttpContext.Current.User.Identity.Name
@using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "" }))
{
@Html.AntiForgeryToken()
<a href="javascript:document.getElementById('logoutForm').submit()">Change</a>
}
</div>
}
唯一的问题是登录后,我希望用户被自动重定向回此页面,而不是首页。 我怎样才能做到这一点? 谢谢。
您可以在loggof方法中使用Request对象的UrlReferrer
属性来获取引用URL,并将该URL传递给您的登录操作方法,并使用该URL在成功登录后将用户重定向回。
您可以将returnurl作为查询字符串传递给登录操作方法,也可以使用TempData
。
[HttpPost]
public ActionResult LogOff()
{
var prevUrl = Request.UrlReferrer.AbsoluteUri;
//Do the things to end the session
return RedirectToAction("Login", new { returnUrl=prevUrl});
}
public ActionResult Login(string returnUrl="")
{
var loginVM=new LoginVM();
if(!String.IsNullOrEmpty(returnUrl))
loginVM.ReturnUrl=returnUrl;
return View(loginVM);
}
如果您喜欢TempData方法
var prevUrl = Request.UrlReferrer.AbsoluteUri;
//Do the things to end the session
TempData.ReturnUrl=prevUrl;
return RedirectToAction("Login");
然后在Login
Action方法中从TempData
读取它。
确保您具有LoginVM的ReturnURL
属性作为表单的一部分(在隐藏变量中),以便当用户发布登录表单时,该表单将在Login HttpPost操作方法中可用。
@model LoginVM
@using(Html.BeginForm())
{
// you other login form elements (username,password) here
@Html.HiddenFor(s=>s.ReturnUrl)
<input type="submit" />
}
并在您的HttpPost操作中
[HttpPost]
public ActionResult Login(LoginVM model)
{
//if login was successful, use model.ReturnUrl to redirect
}
您需要在登录控制器和链接中进行一些工作以实现此目的。 基本上,您会将传入的页面作为参数传递给登录控制器,然后使用该链接在成功登录后将用户转发回该页面。
在您的登录视图的Beginform中添加返回URL。
@using (Html.BeginForm("LoginActionABC", "LoginControllerABC", new { **ReturnUrl** = 'your url' }))
将新参数添加到您的LoginActionABC。
public ActionResult LoginActionABC(string returnUrl)
这可能对您有帮助
这是我使用的代码,最终使该代码正常工作。
在Razor视图中,我只需要添加一个带有returnUrl值的隐藏输入:
@if (Request.IsAuthenticated)
{
<div class="alert alert-dismissable alert-warning">
You are signed in as: @HttpContext.Current.User.Identity.Name
@using (Html.BeginForm("ChangeLogin", "Account", FormMethod.Post, new { id = "logoutForm", @class = ""}))
{
@Html.AntiForgeryToken()
<input type="hidden" name="returnUrl" value="/Item/Bid/@Model.ID" />
<a href="javascript:document.getElementById('logoutForm').submit()">Change</a>
}
</div>
}
在帐户控制器中,我添加了一种新方法来执行注销并使用返回URL重定向到登录页面:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ChangeLogin(string returnUrl)
{
AuthenticationManager.SignOut();
return RedirectToAction("Login", "Account", new System.Web.Routing.RouteValueDictionary { { "returnUrl", returnUrl } });
}
更改身份验证后,这可以成功将用户导航回到原始视图。 非常感谢您提出的其他建议,帮助我达到了这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.