c# - tables - Las funciones de usuario de comprobación de identidad de ASP.NET no funcionan
identity framework c# (3)
Tengo una aplicación MVC 5 ASP.NET. Estoy usando el proveedor de identidad estándar de ASP.NET para la administración de usuarios y roles. Es importante que esté usando el IdentityUser de un proyecto de repositorio propio, pero esto parece estar bien. Puedo registrarme, iniciar sesión, editar usuarios y administrar sus roles.
Agrego usuario a Rol con estas lineas:
UserManager.AddToRole(userdetail.Id, r);
db.Entry(userdetail).State = EntityState.Modified;
db.SaveChanges();
Esto parece funcionar en el nivel DB.
Pero, no puedo usar autenticaciones basadas en roles, en realidad los simples
HttpContext.User.IsInRole("Administrator")
no funciona demasiado
[Authorize(Roles="Administrator")]
no funciona demasiado
Solo puedo verificar con este método, si el usuario es un administrador:
UserManager.IsInRole(userID, "Administrator").
¿Por qué?
En cada tutorial lo que encontré, todo funciona bien. ¿El diferente repositorio de proyectos podría ser la razón? ¿O la identidad de ASP.NET está tan rota?
Por favor aconséjame,
¿Tienes esta entrada en tu web.config?
<roleManager enabled="true">
<providers>
<clear />
<add connectionStringName="ApplicationServices" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" applicationName="/" />
</providers>
</roleManager>
Además, si recuerdo correctamente, hay un espacio de nombres diferente para el ensamblaje del proveedor de roles en diferentes versiones de .NET.
En ese caso, debe cerrar sesión e iniciar sesión nuevamente en el usuario.
Debido a que los datos de los roles también se almacenan en las cookies, debe emitir la cookie nuevamente para que funcione.
Parece que hay un problema. [El tema por diseño]
- Los nombres de roles distinguen entre mayúsculas y minúsculas en AuthorizeAttribute y User.IsInRole
- Los nombres de roles no distinguen entre mayúsculas y minúsculas en UserManager.IsInRole
Además, verifique que el nombre de rol correcto se use para la verificación.
[Lo anterior se basa en la prueba realizada con el siguiente código. Nombre de rol = "Admin", el usuario se agrega al rol "Admin".]
[Authorize(Roles="Admin")] /*True as "Admin" has A capital as entered in Role name*/
public ActionResult Secured()
{
if (User.IsInRole("admin")) /*This is False*/
{
Console.WriteLine("In");
}
if(UserManager.IsInRole(User.Identity.GetUserId(), "admin")) /*This is True!!*/
{
Console.WriteLine("In");
}
return View();
}
Si cambiamos el atributo a [Authorize(Roles="admin")]
, se redirige a la página de inicio de sesión.