在 ASP.NET Core 2.2 MVC 和 Identity 中设置登录路径

eve*_*ert 3 asp.net-mvc asp.net-identity asp.net-core-mvc asp.net-core asp.net-core-2.2

项目详情:

  • ASP.NET 核心 2.2 MVC
  • 身份

我创建了一个自己的登录视图。实际上,如果我调用一个视图,我必须获得授权(通过授权属性),它将自动重定向到登录视图。但目前它是“/Identity/Account/Login”。但我希望显示我自己的登录视图。我怎样才能做到这一点?

我已经在 startup.cs 中尝试过这个:

services.AddDefaultIdentity<ApplicationUser>(config => { config.SignIn.RequireConfirmedEmail = true; })
    .AddDefaultUI(UIFramework.Bootstrap4).AddEntityFrameworkStores<ApplicationDbContext>();

services.Configure<IdentityOptions>(options => { options.User.RequireUniqueEmail = true; });
services.ConfigureApplicationCookie(options =>
    {
        options.Cookie.Name = "auth_cookie";
        options.AccessDeniedPath = "/Account/Login";
        options.LoginPath = "/Account/Login";
        options.LogoutPath = "/Account/LogOff";
        options.Cookie.HttpOnly = true;
        options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
        options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
        options.SlidingExpiration = true;
    });
Run Code Online (Sandbox Code Playgroud)

Tao*_*hou 11

您可以尝试配置CookieAuthenticationOptions以达到您的要求。

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>()
        .AddDefaultUI(UIFramework.Bootstrap4)
        .AddEntityFrameworkStores<ApplicationDbContext>();

    services.PostConfigure<CookieAuthenticationOptions>(IdentityConstants.ApplicationScheme,
    opt =>
    {
        //configure your other properties
        opt.LoginPath = "/Login";
    });
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
Run Code Online (Sandbox Code Playgroud)