2017-10-16 8 views
0

私は認証にASP.NET IDコアを使用しています。 AngularJS SPAにログインルート(UI-Router)があります。私のユーザーは実際のURLの代わりにエスケープされたURLにルーティングされています。Identity Core LoginPathの特殊文字を設定するにはどうすればよいですか?

私のログインパスは "/#!/ 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"。サーバーは間違いなく "#!"をエスケープしています。ブラウザがやっていることではありません。

+0

HTML 5モードを有効にしましたか? –

+0

これは、角度側の問題ではありません。 "/%23!/ login"が存在しないため、ブラウザに401が表示されています。 – Bloodhound

+0

'url: 'login''の代わりに' url:'#/ login''を試してください。 –

答えて

0

私が理解できるのは、OnRedirectToLogin Cookie認証イベントでRedirectUriをエスケープすることだけです。より良い方法があるはずです。

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