繁体   English   中英

如何在asp.net mvc 3登录后将用户重定向回到他所在的位置

[英]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

该示例在登录过程中显示,它确保ret​​urnUrl是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM