自定义url用于身份验证

本文关键字:身份验证 用于 url 自定义 | 更新日期: 2023-09-27 18:13:52

目前我有一个项目在ASP。. NET Core的一个简单的认证。

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

生成的代码有一个Account Controller来验证用户。

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

因为这个网站的主要语言不是英语,所以我想把url改成这样: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错误。

检查项目。在dependencies部分,我看到package:

"dependencies": {
  "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
  "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0",
  ...
}
打开Startup类,我在ConfigureServicesConfigure方法中看到代码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/

自定义url用于身份验证

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

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

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

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