我正在开发一个MVC5 Web应用程序。该应用程序有2个区域,'SU'和''App'。每个区域都应独立进行身份验证。每个区域也有自己的登录页面
我正在使用OWIN来验证用户身份
现在的问题是,我无法根据用户请求的区域设置owin CookieAuthenticationOptions
LoginPath
。
例如,如果用户请求http://example.com/su/reports/dashboard
,我应该可以将其重定向到http://example.com/su/auth/login
同样,对于“应用”区域,如果用户请求http://example.com/app/history/dashboard
,我应该能够将其重定向到http://example.com/app/auth/login
我想避免自定义属性,因此尝试使用以下代码,但它总是重定向到根登录路径,即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)
});
}
}
我是否遵循正确的方法或是否有其他方法来实现相同的目标?谢谢!
答案 0 :(得分:2)
var aArray = [ { title: 'Abc', price: '1,200' }, { title: 'def', price: '900' } ]
var bArray = [ { title: 'def', price: '900' }, { title: 'Abc', price: '1,200' } ]
var sameTitle = true;
aArray.forEach(function(objA){
var titleMatch = bArray.find(function(objB){
return objA.title === objB.title;
})
if(titleMatch === undefined) sameTitle = false;
})
console.log(sameTitle);
属性在启动时设置一次。要根据请求使用不同的网址,您可以使用通过CookieAuthenticationOptions.LoginPath
设置的ICookieAuthenticationProvider
自定义实施,也可以在内置CookieAuthenticationOptions.Provider
中设置OnApplyRedirect
的自定义操作。第二种选择更简单,对你的情况来说似乎已经足够了。
以下是示例代码:
CookieAuthenticationProvider