Ali*_*söz 35 asp.net asp.net-mvc forms-authentication
我想在用户想要访问登录所需页面时从地址栏中删除"returnurl =/blabla".因为我在登录后尝试将用户重定向到静态页面以进行一些选择.
我怎样才能做到这一点?
RPM*_*984 23
这是表单身份验证的本质.(我猜你正在使用).
也就是说,当您访问需要身份验证的页面时,ASP.NET会将您重定向到登录页面,将ReturnUrl作为参数传递,以便您可以返回到登录后的页面.
删除此功能会破坏Forms身份验证本身的语义和设计.(IMO)
我的建议 - 如果你不需要它,不要使用它.
我正在尝试在登录后将用户重定向到静态页面以进行一些选择.
一块蛋糕 - 在您完成登录后,而不是使用FormsAuthentication.RedirectFromLoginPage(使用那个非常ReturnUrl QueryString参数),只需使用FormsAuthentication.SetAuthCookie并在任何地方重定向.
Wil*_*eys 14
将其添加到Global.asax文件中.
public class MvcApplication : HttpApplication {
private const String ReturnUrlRegexPattern = @"\?ReturnUrl=.*$";
public MvcApplication() {
PreSendRequestHeaders += MvcApplicationOnPreSendRequestHeaders;
}
private void MvcApplicationOnPreSendRequestHeaders( object sender, EventArgs e ) {
String redirectUrl = Response.RedirectLocation;
if ( String.IsNullOrEmpty(redirectUrl)
|| !Regex.IsMatch( redirectUrl, ReturnUrlRegexPattern ) ) {
return;
}
Response.RedirectLocation = Regex.Replace( redirectUrl,
ReturnUrlRegexPattern,
String.Empty );
}
Run Code Online (Sandbox Code Playgroud)
Aiv*_*ler 11
创建自定义授权属性
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(
AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
string loginUrl = "/"; // Default Login Url
filterContext.Result = new RedirectResult(loginUrl);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在你的控制器上使用它
[CustomAuthorizeAttribute]
public ActionResult Login()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
小智 9
简单...
[AllowAnonymous]
public ActionResult Login() { return View(); }
[AllowAnonymous]
public ActionResult LoginRedirect(){ return RedirectToAction("Login"); }
Run Code Online (Sandbox Code Playgroud)
Webconfig
<authentication mode="Forms">
<forms loginUrl="~/Account/LoginRedirect" timeout="2880" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
正如RPM1984指出的那样,您无需在登录后将用户重定向到指定的URL.
如果必须删除ReturnUrlquerystring参数,则有几个选项.可能最简单的是在您的登录网页/控制器中,您要检查集合中是否存在ReturnUrl参数Request.QueryStrings.如果它存在,您可以重定向回登录页面,但没有ReturnUrl.
另一种选择是为其创建自定义实现,该实现FormsAuthenticationModule是基于其表单身份验证票据处理用户身份验证的类,并负责将未经授权的用户重定向到登录页面.不幸的是,FormsAuthenticationModule类的方法不是虚拟的,所以你不能创建派生类并覆盖所需的方法,但好消息是类非常简单 - 总共可能有100到200行代码,并使用Reflector你可以快速创建自己的自定义FormsAuthenticationModule类.如果你走这条路(我不推荐),那么你需要做的就是拿出解决OnLeave方法的方法中的代码.ReturnUrl参数.(除了修改此类之外,您还需要配置Web.config文件,以便您的应用程序使用您的自定义FormsAuthenticationModule类而不是.NET Framework中的自定义类.)
快乐编程!
| 归档时间: |
|
| 查看次数: |
59146 次 |
| 最近记录: |