如何为Identity Core LoginPath设置特殊字符?

时间:2017-10-16 12:45:27

标签: asp.net angularjs asp.net-core asp.net-identity

我使用ASP.NET Identity Core进行身份验证。我有一个带登录路径的AngularJS SPA(UI-Router)。我的用户被路由到转义的网址而不是真实的网址。

我的登录路径设置为" /#!/ login",但我的用户被路由到:" /%23!/ login"这导致浏览器中的401。

我已经尝试过使用System.Uri.EscapeDataString,System.Uri.EscapeUriString而没有逃避任何运气。

Startup.cs

services.AddAuthentication()
.AddCookie(cookie => 
{
    cookie.LoginPath = System.Uri.EscapeDataString("/#!/login");
})

AngularJS路线

.state('login', {
        url: 'login',
        views: {
            '': { templateUrl: './Home/login.html', controller: "loginController" }
        }
    })

我已确认服务器正在生成302响应,其中包含以下位置:" http://localhost:63939/%23!/login?ReturnUrl=%2Fadministrator"。所以服务器肯定是在逃避"#!"这不是浏览器正在做的事情。

1 个答案:

答案 0 :(得分:0)

我唯一能够弄清楚的是在OnRedirectToLogin cookie身份验证事件中忽略RedirectUri。必须有一个更好的方法。

cookie.Events = new CookieAuthenticationEvents()
{
    OnRedirectToLogin = context =>
    {
 context.Response.Redirect(System.Uri.UnescapeDataString(context.RedirectUri));
        return Task.FromResult(0);
    }
};