我想基于其在asp net core中的角色为每个用户实现不同的登录页面。我可以为任何角色设置登录路径,但静态。
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "Account/Login/";
options.AccessDeniedPath = "Account/Forbidden/";
});
所以当我调用授权的行为(role =“Admin”)重定向到管理员登录页面时。当授权的调用操作(role =“User”)重定向到用户登录页面
时答案 0 :(得分:2)
我在启动ConfigureServices中添加两个不同的身份验证方案,如下所示
services.AddAuthentication(options =>
{
options.DefaultScheme = "UserAuth";
})
.AddCookie("UserAuth", options =>
{
options.LoginPath = "/Account/Login/";
options.AccessDeniedPath = "/Account/AccessDenied/";
})
.AddCookie("AdminAuth", options =>
{
options.LoginPath = "/Admin/Account/Login/";
options.AccessDeniedPath = "/Admin/Account/AccessDenied/";
});
使用admin角色控制器进行授权时,请选择admin scheme
[Authorize(Roles = "Administrator", AuthenticationSchemes = "AdminAuth")]
使用用户角色控制器进行授权时,我选择用户方案
[Authorize(Roles = "User", AuthenticationSchemes = "UserAuth")]
您可以查看此链接How do I setup multiple Authentication schemes in ASP.NET Core 2.0?
答案 1 :(得分:1)
抱歉,不可能。在用户进行身份验证之前,不知道用户的角色。因此,在他们已经登录之前,您无法告知要投放哪个登录页面,并且他们无法登录,直到您提供登录页面为止,因此这个想法根本无效。
您可以做的最好的事情是提供一个登录页面,允许用户在登录前选择自己的角色(例如,使用单选按钮,下拉列表或将用户分开登录页面的链接)。如果您愿意,可以设置Cookie以保留用户的选择,以便他们在下次登录时只能看到相应的特定于角色的页面。
如果您希望根据除用户上下文之外的某些数据重定向到不同的登录页面(例如,如果您想根据用户最初请求的URL重定向到不同的登录页面),您可以始终{{3并覆盖write a custom authorize attribute。然后,您可以重定向到任何您想要的地方。