asp.netcore设置两个登录路径

问题描述:

我正在为宽度为asp.net核心,并且希望设置两个用于授权的登录路径:用户的'/ account/login'和管理员的'/ Admin/Account/Login' 'Admin'是一个区域名称,但不知道什么是错的宽度。 这里是我在startup.cs代码:asp.netcore设置两个登录路径

public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddAuthorization(); 
     ... 
    } 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    ... 
    app.UseCookieAuthentication(new CookieAuthenticationOptions() 
    { 
     AuthenticationScheme = "UserAuthScheme", 
     AutomaticAuthenticate = true, 
     AutomaticChallenge = true, 
     CookieName = ".AUTOUSERAUTHCOOKIE", 
     LoginPath = "/Account/Login", 
     CookieHttpOnly = true 
    }); 
    app.UseCookieAuthentication(new CookieAuthenticationOptions() 
    { 
     AuthenticationScheme = "AdministratorAuthScheme", 
     AutomaticAuthenticate = true, 
     AutomaticChallenge = true, 
     CookieName = ".AUTOADMINAUTHCOOKIE", 
     LoginPath = "/Admin/Account/Login", 
     CookieHttpOnly = true 
    }); 
    ... 
} 

AdministratorController.cs:

[Authorize(Roles ="Super",ActiveAuthenticationSchemes ="AdministratorAuthScheme")] 
public async Task<IActionResult> Edit(string id) 
{ 
    if (string.IsNullOrEmpty(id)) 
    { 
     return new EmptyResult(); 
    } 
    ..... 
} 

当用户没有一个 “超级” 的作用,它只是跳转到“/帐号/存取遭拒RETURNURL =%2FAdmin%2FAdministrator%2FEdit”。

角色:用户为普通用户,“管理员”为管理员,“超级”为可以修改或创建管理员的超级管理员。 任何人都可以帮助我或给一个参考链接? ,对不起我的英文不好:)

+0

我正在搜索和搜索和搜索...,所以,我仍在搜索...... :( – gsias

使用OnApplyRedirect自定义逻辑的操作。

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
    LoginPath = new PathString("/account/login"), 
    Provider = new CookieAuthenticationProvider 
    { 
     OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
      validateInterval: TimeSpan.FromMinutes(30), 
      regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)), 
     OnApplyRedirect = ctx => 
     { 
      if (ctx.Request.Path.StartsWithSegments(new PathString("/admin"))) 
       ctx.Response.Redirect("/admin/account/login?ReturnUrl=" + HttpUtility.UrlEncode(ctx.Request.Path.ToString())); 
      else 
       ctx.Response.Redirect(ctx.RedirectUri); 
     } 
    }, 
});