2016-10-20 18 views
1

現在、私は簡単な認証でASP.NETコアのプロジェクトを持っています。認証のカスタムURL

メインコードはYeomanとgenerator-aspnetで生成されました。

生成されたコードには、ユーザーを認証するアカウントコントローラがあります。

ユーザーがログするたびに、asp.netはユーザーをhttp://domain/Account/Loginにリダイレクトします。

このサイトの主な言語は、それは英語ではありませんので、私はこのような何かにURLを変更したい: http://domain/usuarios/login

ので、アカウント・コントローラで、私はクラスの上にルート注釈を追加しました:

[Authorize] 
[Route("usuarios")] 
public class AccountController : Controller 
{ 
    ... 

    [HttpGet] 
    [AllowAnonymous] 
    [Route("login")] 
    public IActionResult Login(string returnUrl = null) 
    { 
     ... 
    } 

    [HttpPost] 
    [AllowAnonymous] 
    [ValidadeAntiForgeryToken] 
    [Route("login")] 
    public async Task<IActionResult> Login(LoginViewModel model, string returlUrl = null) 
    { 
     ... 
    } 
} 

ここで手動でhttp://domain/usuarios/loginに行くと、ログインページが表示されます。 しかし、認証が必要なページに行くと、ASP.NETコアはまだhttp://domain/Account/Loginにリダイレクトされ、404エラーが返されます。

project.jsonの確認、私は、依存関係のセクションでパッケージを参照してください。

"dependencies": { 
    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0", 
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0", 
    ... 
} 

スタートアップクラスを開くと、私はConfigureServices設定方法コードapp.UseIdentity();で見たが、何についてのapp.UseCookieAuthentication()ここで

は、設定方法の一部です:

app.UseStaticFiles(); 
app.UseIdentity(); 

app.UseMvc(routes => 
{ 
    routes.MapRoute(
    name: "default", 
    template: "{controller=Home}/{action=Index}/{id?}"); 
}); 

正しいURLにリダイレクトするコードをどこで更新しますか?

PS:あなたはクッキーベースの認証を使用している場合、それは多くのhttps://shellmonger.com/2015/04/04/asp-net-vnext-identity-part-2-the-login-process/

+0

通常、あなたのコードは401状態コードをクライアントに送信します(私はなぜ、「アカウント/ログイン」にリダイレクトされたのか理解できませんでした) 'AutomaticChallenge = true、'を指定しなかった(デフォルトはfalse)。 'AutomaticChallenge'をtrueに設定するか、' [Authorize(ActiveAuthenticationSchemes = "Cookie")] 'を使用してください。 –

+0

@ademcaglin質問を更新します。この質問を投稿した後、コードに 'app.UseIdentity()'というコードがあることがわかります –

答えて

2

ようなものだ生成されたコードは、このようなあなたのstartup.csを更新:

public void ConfigureServices(IServiceCollection services) 
{  
    services.Configure<CookieAuthenticationOptions>(options => 
    { 
     options.LoginPath = new PathString("/usuarios/login"); 
    }); 
} 
1

あなたが好きなConfigureServices方法でIdentityOptionsを設定する必要があります以下のようになります。

services.Configure<IdentityOptions>(opt => 
{ 
     opt.Cookies.ApplicationCookie.LoginPath = new PathString("/usuarios/login"); 
});