Bas*_*tri 6 asp.net-mvc owin asp.net-mvc-5 owin-middleware
我正在开发一个MVC5 Web应用程序.该应用程序有2个区域,'SU'和''App'.每个区域都应独立进行身份验证.每个区域也有自己的登录页面.
我正在使用OWIN来验证用户身份.
现在的问题是,我无法CookieAuthenticationOptions LoginPath根据用户请求的区域设置owin .
例如,如果用户请求http://example.com/su/reports/dashboard,我应该能够将它们重定向到http://example.com/su/auth/login
同样的,对于'App'区域,如果用户请求http://example.com/app/history/dashboard,我应该能够将它们重定向到http://example.com/app/auth/login
我想避免自定义属性,因此尝试下面的代码,但它总是重定向到root登录路径,即, http://example.com/auth/login
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
var url = HttpContext.Current.Request.Url.AbsoluteUri;
string loginPath = "/auth/login";
string areaName = string.Empty;
if (url.ToLower().Contains("/su/"))
{
areaName = "SU";
loginPath = "/su/auth/login";
}
if (url.ToLower().Contains("/app/"))
{
areaName = "APP";
loginPath = "/app/auth/login";
}
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "ApplicationCookie" + areaName,
LoginPath = new PathString(loginPath)
});
}
}
Run Code Online (Sandbox Code Playgroud)
我是否遵循正确的方法或是否有其他方法来实现相同的目标?谢谢!
CookieAuthenticationOptions.LoginPath属性在启动时设置一次。为了根据请求使用不同的 URL,您可以使用ICookieAuthenticationProviderset through的自定义实现CookieAuthenticationOptions.Provider,或者仅在OnApplyRedirect内置CookieAuthenticationProvider. 第二个选项更简单,似乎足以满足您的情况。
这是示例代码:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "ApplicationCookie",
LoginPath = new PathString("/auth/login"),
Provider = new CookieAuthenticationProvider { OnApplyRedirect = OnApplyRedirect }
});
public static void OnApplyRedirect(CookieApplyRedirectContext context)
{
var url = HttpContext.Current.Request.Url.AbsoluteUri;
string redirectUrl = "/auth/login";
if (url.ToLower().Contains("/su/"))
{
redirectUrl = "/su/auth/login";
}
else if (url.ToLower().Contains("/app/"))
{
redirectUrl = "/app/auth/login";
}
context.Response.Redirect(redirectUrl);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
520 次 |
| 最近记录: |