[英]After logout,how to redirect user to login page when he/she will click back button of browser in ASP.NET MVC3
[英]How to redirect a user back to where he was after login in asp.net mvc 3
我正在学习ASP.NET MVC3,我现在正在研究用户处理。 我的第一个问题是(我知道在其他主题中有很多关于这个主题的内容,我只是找不到一个很好的MVC3),我希望登录页面重定向我来自我的地方,或者我被重定向到的地方。 在PHP中,也许我会将这个url添加到查询字符串中。 但我需要一种方法以某种方式自动执行此操作,这是一种非常常见的设计模式,我想知道是否有“内置”方式来执行此操作。
什么是最干净,或首选的方式?
此外,当我重定向到登录页面时,这将是检查和存储我重定向的URL的最佳方式? 我会在请求对象中检查引用者并将其在URL中吐出“?redirect = protected.html”,但我甚至不确定如何正确执行此操作。
关于这个问题的任何建议将不胜感激。
MVC的工作方式与ASP.NET相同。
如果您使用表单身份验证,那么很多问题都将为您解答。
在您的Web Config中找到authentication="Windows"
,然后将其更改为Forms
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" />
</authentication>
MVC 3实际上会为您提供Account / LogOn路径作为MVC 3模板项目的一部分(检查您的模型,看看您是否有一个名为AccountModel
)。
然后,您只需添加Authorization
即可拒绝所有用户访问您的网站:
<authorization>
<deny users="?"/>
</authorization>
默认情况下,这会将访问您网站的任何人发送到您的登录信息。
因此,在验证登录凭据是否正确后,将AuthCookie
设置为与ASP.NET相同:
FormsAuthentication.SetAuthCookie(userName, false);
从此形式,您可以重定向到您想要的任何地方。
重定向回到你来自的地方:
FormsAuthentication.RedirectFromLoginPage(userName, false);
不要忘记另一个有用的陈述:
FormsAuthentication.SignOut();
如果没有身份验证,站点将不允许您在任何地方访问,直到您登录,因此CSS将停止工作。
我添加的位置以确保不会发生这种情况如下:
<location path="Content">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<location path="Scripts">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
在asp.net中它是一个?returnUrl = ...
(1)确保你有类似的东西
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
在你的根web.config中。
(2)在您想要保护的Controller中,在其上方添加[Authorize]
属性。
请创建新项目并选择Internet应用程序模板而不是清空项目 ,您将获得简单登录过程的示例以及更改密码。
注意:请阅读此内容: http : //www.asp.net/mvc/tutorials/preventing-open-redirection-attacks
该示例在登录过程中显示,它确保returnUrl是Url.IsLocalUrl()帮助程序的本地URL,以防止打开重定向攻击。
更新:最好的方法是在您真正了解标准流程后实现自己的自定义登录流程 ,而不是使用URL来跟踪用户的来源,您可以设置一个新的cookie来存储带有httponly cookie的returnUrl并删除它只是在重定向到上一页之前。
另一种常见做法是使用角色 。 您可以通过将允许的角色添加为控制器上方的属性,为特定的名为Role
的用户组指定目录/控制器:
[Authorize(Roles = "Admin")]
请参阅此 visual studio 管理工具,以使用内置 Web界面创建示例用户和角色。
您可能还希望使用站点地图根据当前用户角色排列显示/隐藏菜单的页面和菜单链接。 使用此mvcsitemap在ASP.NET MVC站点地图中添加安全修整功能。
在某些情况下,恰好有自定义身份验证而不是基于标准表单(企业级应用程序的常见情况)。
在这种情况下,我建议手动管理查询字符串中的returnUrl
参数。 登录页面读取此URL并在成功验证后重定向。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.