我正在使用身份作为授权引擎编写ASP.NET应用程序。我编写了自定义用户和角色存储,它们似乎正常工作。但是,由于某些未知的原因,尝试对控制器的动作使用Authorize
角色失败,并重定向到Home/Index
。该动作如下所示:
[Authorize(Roles = "Admin")]
public ActionResult Manage()
{
return View();
}
重定向是在无提示的情况下完成的,因此我无法在任何地方挂上调试器(特别是在执行操作之前已完成操作过滤)。
我想这可能不足以诊断问题,所以只需在评论中告诉我,您还需要什么其他信息,我将编辑问题。
为什么不起作用?
编辑:Startup.cs中的配置
public void Configuration(IAppBuilder app)
{
DataProtectionProvider = app.GetDataProtectionProvider();
app.CreatePerOwinContext<ApplicationUserManager>(() => DependencyResolver.Current.GetService<ApplicationUserManager>());
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "ApplicationCookie",
LoginPath = new PathString("/Account/Login")
});
}
编辑:另一个动作:
[AllowAnonymous]
public async Task<ActionResult> Index()
{
// This returns FALSE
if (User.IsInRole("Admin"))
System.Diagnostics.Debug.WriteLine("Ok");
var userManager = UnityConfig.Container.Resolve<ApplicationUserManager>();
// This returns TRUE
if (await userManager.IsInRoleAsync(User.Identity.GetUserId<int>(), "Admin"))
System.Diagnostics.Debug.WriteLine("Ok");
return View();
}
最佳答案
需要检查的几件事:
登录页面设置为什么?我猜您未经身份验证或未经授权,MVC会将您发送到登录页面(可能已设置或默认为“ /”
如果您确定已登录(已验证),请再次检查您的用户确实具有管理员角色(已授权)。
我相信用户存储区中有一个可以重写的方法,以查看为用户角色返回的内容。可能值得在那里设置一个断点,看看发生了什么。
关于c# - Authorize(Roles =“Admin”)不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34831046/