ReturnUrl
有点难看。我想改用redirect
。如何指定应与表单身份验证重定向URL一起使用的参数名称以及[Authorize]
属性?或者我是否必须创建IAuthorizationFilter实现? :(
示例:
[Authorize]
public class Tools : Controller
{
public ActionResult Index()
{
return View();
}
}
如果用户未登录访问http://example.com/tools,我希望将其重定向到http://example.com/account/logon?redirect=%2ftools
,而不是默认http://example.com/Account/LogOn?ReturnUrl=%2ftools
对于/ account / logon部分,我可以修改Global.asax中的路由并更改
<authentication mode="Forms">
<forms loginUrl="~/account/logon" timeout="2880" />
</authentication>
web.config中的。但我不知道如何更改ReturnUrl参数。
答案 0 :(得分:12)
将此密钥添加到web.config
的appSettings部分<add key="aspnet:FormsAuthReturnUrlVar" value="redirect" />
答案 1 :(得分:2)
这里的问题和答案似乎与旧表单身份验证相关。在较新版本的MVC上,例如MVC 5(使用Identity 2.0),您可以在Startup.Auth.cs
:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/account/login"),
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
},
ReturnUrlParameter = "redirect"
});
重要的部分当然是ReturnUrlParameter = "redirect"
(可以是任何东西)。其余可能与您的项目不同。
答案 2 :(得分:1)
不是最佳解决方案,但它有效......
<rule name="FormsAuthentication" stopProcessing="true">
<match url="^account/log(i|o)n$" />
<conditions>
<add input="{QUERY_STRING}" pattern="^ReturnUrl=([^=&]+)$" />
</conditions>
<action type="Redirect" url="account/logon?redirect={C:1}" appendQueryString="false" />
</rule>
答案 3 :(得分:0)
这里的问题是重定向不是帖子。这是一个得到的。在get上传递变量的唯一方法是使用某种类型的查询字符串参数。你可以伪装这个url重写,但它仍然是一个查询参数,并传递给URL。
也许你可以更清楚一下你在寻找什么?
答案 4 :(得分:-1)
无法使用配置更改参数的名称,因为“ReturnUrl”参数名称在System.Web.Security.FormsAuthentication类中进行了硬编码,该类是用于表单身份验证的类,包括重定向。
实现所需结果的一种方法是扩展Authorize属性,使其重定向到具有自定义参数名称的登录页面。然后,根据您使用的FormsAuthentication中的哪些其他方法,您也可以修改它们,特别是FormsAuthentication.RedirectFromLoginPage。
答案 5 :(得分:-1)
参数名称无法更改,这很烦人。我通过编写自己的身份验证模块来解决这个问题 - 您需要知道身份验证的工作原理,但这并不难 - 只要看看它是如何在反射器中完成的(并且可能会简化它,我最终只使用了FormsAuthentication中的cookie加密/解密)。
答案 6 :(得分:-1)
只需在以下键值对的appSettings部分添加web.config:
<add key="aspnet:FormsAuthReturnUrlVar" value="your-custom-parameter-name"/>