2 votes

Obtenir les données de l'utilisateur de l'identité authentifiée en ASP.NET MVC

J'ai créé un cadre d'entité ASP.NET Identity et ajouté des champs client pour les fonctions d'enregistrement et de connexion dans ASP.NET Identity - MVC.

identityModel.cs

  public class ApplicationUser : IdentityUser
        {
            public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
            {
                // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
                var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
                // Add custom user claims here
                return userIdentity;
            }

            //add custom fields
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public bool IsAdministrator { get; set; }

        }

 public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("DefaultConnection", throwIfV1Schema: false)
        {
        }

        public DbSet<Property> Property { get; set; }

        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext();
        }
    }

Dans une autre classe appelée Property (après que le login et l'authentification soient passés)

Je veux faire appel à un seul champ de la table AspNetUsers, qui est celui qui est actuellement connecté. Je veux vérifier le champ IsAdministrator et ses valeurs et poser des conditions sur ce qu'il faut afficher en fonction de cette valeur.

C'est ce que j'ai fait, mais sans succès.

 public class PropertyController : Controller
    {
        private ApplicationDbContext db = new ApplicationDbContext();

        // GET: Property
        [Authorize]
        public async Task<ActionResult> Index()
        {

            var user = System.Web.HttpContext.Current.User.Identity.GetUserId();
            bool admin = db.Users.SingleOrDefault(y => y.Id.Equals("user")).IsAdministrator;
            //return View(await db.Property.ToListAsync());
            if (admin == true){
                return View(await db.Property.Where(x => x.PropertyID == 1).ToListAsync()); }
            else  {
                return View(await db.Property.ToListAsync());}

        }

J'ai pu extraire l'UserID de l'utilisateur actuellement connecté, mais je veux un autre champ ou information de l'utilisateur qui est le champ IsAdmin qui est soit 1 OU 0.

Comment puis-je y parvenir ?

cela ne fonctionne pas

 bool admin = db.Users.SingleOrDefault(y => y.Id.Equals("user")).IsAdministrator;

erreur enter image description here

1voto

L'expression SingleOrDefault(y => y.Id.Equals("user")) n'a pas de sens. Il va chercher dans la base de données un utilisateur avec Id = "user" et ne trouve rien. C'est pourquoi il renvoie null, ce qui provoque l'apparition de l'erreur NullReferenceException .

Essayez d'utiliser l'extrait suivant

...
var userId = System.Web.HttpContext.Current.User.Identity.GetUserName();
var user = UserManager.FindByNameAsync(userId);
var isAdmin = user.IsAdministrator;
...

pour obtenir l'utilisateur

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X