ASP.NET Core MVC 6未登录用户授权重定向异常求助
解决未登录与无权限用户统一重定向问题
问题核心在于:未登录用户属于未认证状态,默认会触发Identity的登录路径;而已登录但无对应角色的用户属于未授权状态,会触发你配置的AccessDeniedPath。要让两者统一重定向到同一页面,只需在ConfigureApplicationCookie中额外配置LoginPath即可。
修改你的Program.cs配置代码:
builder.Services.ConfigureApplicationCookie(options => { options.Cookie.Name = ".AspNetCore.Identity.Application"; options.AccessDeniedPath = "/Account/AccessDenied"; // 添加该行,将未登录用户的重定向路径与无权限场景统一 options.LoginPath = "/Account/AccessDenied"; });
配置完成后,无论是未登录用户访问受保护资源,还是已登录用户无对应角色权限,都会被重定向到/Account/AccessDenied页面。
如果需要在AccessDenied页面中区分两种场景(以便给用户不同提示),可以在控制器方法中通过HttpContext判断用户认证状态:
// 在Account控制器的AccessDenied方法中 public IActionResult AccessDenied() { ViewBag.IsAuthenticated = User.Identity.IsAuthenticated; return View(); }
随后在视图中根据状态显示不同提示:
@if (ViewBag.IsAuthenticated) { <p>你没有访问该页面的权限,请联系管理员。</p> } else { <p>请先登录后再访问该页面。</p> }
内容的提问来源于stack exchange,提问作者Diego
相关产品推荐
相关产品推荐

