MVC 登录后重定向回最初请求的 URL FormsAuthentication.RedirectFromLoginPage
在传统的Asp.net webForm 中如果使用 Form身份验证。登录后重定向到最初请求的页面只需使用
FormsAuthentication.RedirectFromLoginPage
但在MVC中,MVC可不吃这一套。试了很多方法都不行。但最终还是搞定了。之所以标题中写到“FormsAuthentication.RedirectFromLoginPage”。是因为我一开始不停的在Google中找“FormsAuthentication.RedirectFromLoginPage”这个关键字想到找到这个要怎么样应用到MVC中。或者在MVC中有没有替代的写法。没有成功但受到了一些启发。
因为没有登录用户如果不是直接访问登录页是会被重定向到登录页面。并且URL后面会跟上“ReturnUrl”参数记录是从哪个页面跳转过来的。
那么我们可以这样操作
1.在登录的“Action” 方法中接收“ReturnUrl”参数。
2.在验证登录的“Action”方法中登录成功后,判断如果“ReturnUrl”不为空就跳转到“ReturnUrl”指向的页面。
代码:
1.实体:
在登录的实体中增加了“ReturnUrl”参数用于接收登录前的页面地址
public class LoginInfo
{
public string LoginName { get; set; } public string LoginPwd { get; set; } public string SecurityCode { get; set; } public string ReturnUrl { get; set; }
}
2.登录页面的Action
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.returnUrl = returnUrl; return View();
}
3.登录页面视图
辅助方法“@Html.Hidden("returnUrl")”会自动的生成“<input id="returnUrl" name="returnUrl" type="hidden">”HTML代码,并且绑定“ViewBag.returnUrl”属性。
<form action="/User/Login" method="post">
<input type="text" name="LoginName" />
<input type="password" name="LoginPwd" />
<input type="text" name="SecurityCode" />
<img id="veri_code" src="@Url.Action("AuthenticationCode", new { r = new Random().NextDouble() })" width="65" height="23" class="identify_code" alt="验证码" />
<a href="javascript:void(0);" onclick="refreshCode()">刷新</a>
<input type="submit" value="登录" />
@Html.Hidden("returnUrl")
</form>
4.执行登录验证的Action
[HttpPost]
[AllowAnonymous]
public void Login(LoginInfo login)
{
if (login.SecurityCode != SessionUtil.AuthenticationCode)
throw new BusinessException("验证码错误"); var user = UserService.Instance.Login(login.LoginName, login.LoginPwd);
SessionUtil.Current = user; FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
, user.Id.ToString(), DateTime.Now, DateTime.Now.AddYears(),
true, string.Empty, FormsAuthentication.FormsCookiePath); string ticString = FormsAuthentication.Encrypt(ticket); HttpCookie coo = new HttpCookie(FormsAuthentication.FormsCookieName, ticString); if (ticket.IsPersistent)
{
coo.Expires = ticket.Expiration;
} Response.Cookies.Add(coo);if (string.IsNullOrWhiteSpace(login.ReturnUrl))
Response.Redirect("/PublicAccountWater/Index");
else
Response.Redirect(login.ReturnUrl);
}
MVC 登录后重定向回最初请求的 URL FormsAuthentication.RedirectFromLoginPage的更多相关文章
- MVC 登录后重定向来最初请求的 URL
1.在登录的“Action” 方法中接收“ReturnUrl”参数. 2.在验证登录的“Action”方法中登录成功后,判断如果“ReturnUrl”不为空就跳转到“ReturnUrl”指向的页面. ...
- WordPress用户登录后重定向到指定页面
这篇文章将向您展示WordPress用户登录后如何重定向到指定页面或者文章的技巧. 一.重定向到网站管理面板. 将以下代码添加到您的当前主题的 functions.php 文件中: function ...
- 前端开发入门到进阶第三集【获取cookie然后单点登录后重定向】
/* var token ;//https://blog.csdn.net/qq_29207823/article/details/81745757 if( $.cookie('BBK_TOKEN') ...
- yii中登录后跳转回登录前请求的页面
当我们请求一个经过权限控制的请求不通过时,会跳转到一个地方请求权限,请求结束后需要跳转回之前的页面.比如我们请求一个需要登录的action,会被跳转到login页面,我们希望登录成功后跳转到我们之前希 ...
- 2017.3.31 spring mvc教程(六)转发、重定向、ajax请求
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...
- 九、封装登录POST请求、登录后POST请求以及GET请求
一.封装登录后POST请求以及GET请求 /** * 全局运行时环境参数管理器 */ public static Map<String, String> BASE_GLOBAL_MAP; ...
- Django学习系列16:处理完POST请求后重定向
处理完POST请求后重定向 代码中new_item_text = ''的写法不怎么样.解决第二个问题时候,顺带把这个问题也解决了. 人们都说处理完post请求后一定要重定向,接下来就实现这个功能吧.修 ...
- 转---在ASP.NET MVC中实现登录后回到原先的界面
有这样的一个需求:提交表单,如果用户没有登录,就跳转到登录页,登录后,跳转到原先表单提交这个页面,而且需要保持提交表单界面的数据. 提交表单的页面是一个强类型视图页,如果不考虑需要保持提交表单界面的数 ...
- persistence_timeout ,域名请求登录后一操作即被踢出,,KeepAlive,lvs
virtual_server *.*.*.* 80 { delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 120 protocol TCP ...
随机推荐
- vue2.0 自定义 侧滑删除(LeftSlider)组件
1.自定义侧滑删除组件 LeftSlider.vue <!-- 侧滑删除 组件 --> <template> <div class="delete"& ...
- JobClient
/** * <code>JobClient</code> is the primary interface for the user-job to interact * wit ...
- mysql性能优化-慢查询分析、优化索引和配置 MySQL索引介绍
MySQL索引介绍 聚集索引(Clustered Index)----叶子节点存放整行记录辅助索引(Secondary Index)----叶子节点存放row identifier-------Inn ...
- MySQL 创始人:写代码比打游戏爽,程序员应多泡开源社区
王练 发布于2017年09月04日 收藏 43 开源中国全球专享福利,云栖大会购票大返现!>>> 根据StackOverflow的最新调查,MySQL仍然是全世界最流行的数 ...
- erlang防止反编译
前面提到了erlang的反编译,下面说下防止反编译: 1)建立~/.erlang.crypt 在编译的用户名的home目录中建立一个加密方法的文件.erlang.crypt,内容如下: [{debug ...
- Spring与JDK版本不一致引发问题Caused by: java.lang.IllegalArgumentException
tomcat启动一个spring的项目,tomcat使用8.5,JDK使用1.8,Spring使用3.0,启动之后报错 Caused by: java.lang.IllegalArgumentExce ...
- zoj 2711 - Regular Words
题目:求由A.B.C构成的有序传中长度为n.且每一个B前面的A的个数不少于当前B,每一个C前面的B的个数不少于当前C的个数. 分析:dp,求排列组合数. 考虑二维的状况: 假设 A>=B 则在 ...
- 【BZOJ2729】[HNOI2012]排队 组合数
[BZOJ2729][HNOI2012]排队 Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那 ...
- Qt中的打印操作
Qt中对打印的支持是有一个独立的printsupport模块来完成的,所以,要想在程序中使用Qt的打印功能,必须先在pro文件中添加下面这句代码: QT += printsupport在这个模块中,提 ...
- 管中窥Vue
博客文章链接:管中窥Vue Vue和Angular.React.js的相同点和不同点? 与React的相同: 都使用了Virtual DOM 提供了响应式和组件化的视图组件 将注意力集中保持在核心库, ...