用于身份验证的自定义网址

时间:2016-10-20 11:15:53

标签: c# authentication asp.net-core

目前,我在ASP.NET Core中有一个带有简单身份验证的项目。

主要代码是由Yeoman和generator-aspnet生成的。

生成的代码有一个帐户控制器来验证用户。

每次用户需要登录时,asp.net都会将用户重定向到http://domain/Account/Login

因为这个网站的主要语言不是英文,所以我喜欢将网址更改为: http://domain/usuarios/login

因此,在Account Controller中,我在类的顶部添加了一个Route注释:

[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 Core仍会将我重定向到http://domain/Account/Login并返回404错误。

检查project.json,我在依赖项部分看到了包:

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

打开Startup课程,我在配置服务配置方法中看到了代码app.UseIdentity();,但没有关于app.UseCookieAuthentication()

的信息

以下是Configure方法的一部分:

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/

非常相似

2 个答案:

答案 0 :(得分:3)

如果您使用基于cookie的身份验证,请更新您的startup.cs:

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

答案 1 :(得分:1)

您需要在IdentityOptions方法中配置ConfigureServices,如下所示:

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