none
Accéder à ApplicationUser : IdentityUser MVC6 EF7 RRS feed

  • Question

  • Bonjour,

    J'ai essayé de suivre quelques documentations trouvé sur internet. Mais aucune n'a porté ces fruits.

    J'ai rajouté 2 champs nom/prénom dans ma classe: ApplicationUser : IdentityUser Dont je souhaite pouvoir y accéder depuis mon _Layout.cshtml.

    using Microsoft.AspNet.Identity.EntityFramework;
    using System.ComponentModel.DataAnnotations;
    
    namespace BFcMVC.Models
    {
        public class ApplicationUser : IdentityUser
        {
            [Required]
            [Display(Name ="Nom *")]
            public string LastName { get; set; }
    
            [Required]
            [Display(Name = "Prénom *")]
            public string FirstName { get; set; }
    
        }
    }
    
    using System.ComponentModel.DataAnnotations;
    
    namespace BFcMVC.ViewModels.Account
    {
        public class RegisterViewModel
        {
            [Required]
            [Display(Name = "Nom *")]
            public string LastName { get; set; }
    
            [Required]
            [Display(Name = "Prénom *")]
            public string FirstName { get; set; }
    
            [Required]
            [EmailAddress]
            [Display(Name = "Email")]
            public string Email { get; set; }
    
            [Required]
            [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
            [DataType(DataType.Password)]
            [Display(Name = "Password")]
            public string Password { get; set; }
    
            [DataType(DataType.Password)]
            [Display(Name = "Confirm password")]
            [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
            public string ConfirmPassword { get; set; }
        }
    }
    

    //
            // POST: /Account/Register
            [HttpPost]
            [AllowAnonymous]
            [ValidateAntiForgeryToken]
            public async Task<IActionResult> Register(RegisterViewModel model)
            {
                if (ModelState.IsValid)
                {
                    var user = new ApplicationUser { UserName = model.Email, Email = model.Email, LastName = model.LastName, FirstName = model.FirstName };
                         ...
                }
            }

    via @User.Identity je n'arrive pas a accéder à LastName et FirstName. et aucune des documentations que j'ai trouvé sur google ne m'a aidé. Par ailleurs la doc me semble incomplète à ce niveau là: https://docs.asp.net/projects/mvc/en/latest/

    Savez-vous comment accéder à ces données ?

    Bien à vous.

    mercredi 3 février 2016 16:21

Réponses

  • Bonjour,

    User.Identity est une notion "abstraite" maintenant le lien entre l'application et une authentification. Techniquement nous pouvons utiliser un autre système que MVC Identity.

    Dans votre cas c'est à vous de récupérer votre utilisateur grâce à l'ID maintenu dans User.Identity.GetUserId(). Personnellement j'utilise souvent une méthode d'extension du genre  :

    public static class IDentityExtensions{
     public static ApplicationUser GetUserInfo(this IIdentity identity){
      var um = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
      return um.FindById(identity.GetUserId());
     }
    }

    Ensuite je n'ai plus qu'a appeler

    @User.Identity.GetUserInfo()

    Vous pouvez également faire directement une requête dans votre contexte de données. A vous de voir ce qui est plus intéressant dans votre situation.

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.


    jeudi 4 février 2016 07:52

Toutes les réponses

  • Bonjour,

    User.Identity est une notion "abstraite" maintenant le lien entre l'application et une authentification. Techniquement nous pouvons utiliser un autre système que MVC Identity.

    Dans votre cas c'est à vous de récupérer votre utilisateur grâce à l'ID maintenu dans User.Identity.GetUserId(). Personnellement j'utilise souvent une méthode d'extension du genre  :

    public static class IDentityExtensions{
     public static ApplicationUser GetUserInfo(this IIdentity identity){
      var um = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
      return um.FindById(identity.GetUserId());
     }
    }

    Ensuite je n'ai plus qu'a appeler

    @User.Identity.GetUserInfo()

    Vous pouvez également faire directement une requête dans votre contexte de données. A vous de voir ce qui est plus intéressant dans votre situation.

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.


    jeudi 4 février 2016 07:52
  • Merci à vous :)
    vendredi 5 février 2016 21:05