Partage
  • Partager sur Facebook
  • Partager sur Twitter

récupérer l'objet user pour ma View

Sujet résolu
    22 février 2019 à 13:16:10

    Bonjour, c'est encore moi X.x

    J'ai enfin fini l'authentification, mais j'aimerai récupérer toutes les informations de l'utilisateur connecté à l'aide de l'identifiant (son nom et son prenom), afin de pouvoir afficher un petit message si l'utilisateur est déjà connecté dans ma vue .

    Voilà comment j'obtient un utilisateur :

    namespace ProjetLocalisationSass.Models
    {
        
        public class UserMethod
        {
            private DbEntities db = new DbEntities();
     
            public users ObtainUsers(int id)
            {
                return db.users.FirstOrDefault(u => u.id == id);
            }
    
            public users ObtainUsers(string idString)
            {
                int id;
                if (int.TryParse(idString, out id))
                    return ObtainUsers(id);
                return null;
            }
    
    
        }
    }

    Et ma méthode Login dans mon controller 

    public LoginController()
            {
    
            }
            /* AllowAnonymous permet que l'action puisse être exécutée sans que l'utilisateur soit authentifié */
            // GET: Login
            [AllowAnonymous]
            public ActionResult Login()
            {
                LoginViewModel viewModel = new LoginViewModel { Authentifie = HttpContext.User.Identity.IsAuthenticated };
    
                //on verifie si l'utilisateur est connecté
                if (HttpContext.User.Identity.IsAuthenticated)
                {
                    //récupérer l'object utilisateur avec l' identiant de lutilisateur
                    //var tomtom = viewModel.users = userMethod.ObtainUsers(int.Parse(HttpContext.User.Identity.Name));
    
                    var RecupId = int.Parse(HttpContext.User.Identity.Name);
                    viewModel.users = userMethod.ObtainUsers(HttpContext.User.Identity.Name);
                    
    
                    
                }
                return View(viewModel);
            }


    mon View Model : 

    namespace ProjetLocalisationSass.Models
    {
        public class LoginViewModel
        {
            private DbEntities db = new DbEntities();
            public bool Authentifie { get; set; }
            public users users { get; set; }
            public int idViewModel { get; set; }
    
    
            private string domainAt = "";
            [Required]
            [Display(Name = "Identifiant")]
            public string user_login { get; set; }
    
            [Required]
            [DataType(DataType.Password)]
            [Display(Name = "Mot de passe")]
            public string user_password { get; set; }
    
    
            LoginViewModel(string username, string passwd)
            {
                user_login = username;
                user_password = passwd;
            }
            public LoginViewModel()
            {
            }
    
            public LoginViewModel(users users)
            {
                user_login = users.user_login;
                user_password = users.user_password;
            }
    
            //faut-il mettre des getter et des setter ? 
            private bool Boolauthentification;
    
    
            public bool authentification(string username, string passwd, string domain)
            {
                Blabla ...
            }
    
           
        }
    
       
    }

    Pour moi du moment public users users { get; set; }, ca devrait fonctionnait non ? 

    Ma table users :

    //------------------------------------------------------------------------------
    // <auto-generated>
    //     Ce code a été généré à partir d'un modèle.
    //
    //     Des modifications manuelles apportées à ce fichier peuvent conduire à un comportement inattendu de votre application.
    //     Les modifications manuelles apportées à ce fichier sont remplacées si le code est régénéré.
    // </auto-generated>
    //------------------------------------------------------------------------------
    
    namespace ProjetLocalisationSass
    {
        using System;
        using System.Collections.Generic;
        using System.ComponentModel.DataAnnotations;
    
        public partial class users
        {
            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
            public users()
            {
                this.plateau_has_users = new HashSet<plateau_has_users>();
                this.users_has_equipments = new HashSet<users_has_equipments>();
                this.users_has_furnitures = new HashSet<users_has_furnitures>();
            }
    
            //id , Login et mot de passe        
            public int id { get; set; }
            public string user_login { get; set; }
            [DataType(DataType.Password)]
            [Display(Name = "Mot de passe")]
            public string user_password { get; set; }
    
            
            //données sur l'utilisateur
            [Display(Name = "Nom")]
            public string first_name { get; set; }
            [Display(Name = "Prénom")]
            public string last_name { get; set; }
        
            public string photo { get; set; }
        
            [Display(Name = "Email")]
            public string email { get; set; }
            [Display(Name = "Numéro de téléphone")]
            public string telephone_number { get; set; }
    
    
            // Pas très utiles, reliées au date 
            public Nullable<System.DateTime> created_at { get; set; }
            public Nullable<System.DateTime> deleted_at { get; set; }
            public Nullable<System.DateTime> updated_at { get; set; }
            public Nullable<sbyte> admin { get; set; }
    
            // les tables pivots
       [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
            public virtual ICollection<users_has_equipments> users_has_equipments { get; set; }
            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
            public virtual ICollection<users_has_furnitures> users_has_furnitures { get; set; }
    
    
           
        }
    }
    

    Et j'ai cette erreur : 

    Et voilà j'ai cette erreur.

    Je sais que pour récupérer les informations sur un utilisateur on à besoin d'un Id . Comme vous pouvez le voir j'ai  l'id numéro 4 et avec ma méthode ObtainUser, j'obtient normalement les informations réliée à cette utilisateur.

    J'ai mit dans mon view model :

    public users users { get; set; }

    Donc normalement si je fait viewModel.users, je devrais avoir toutes les information sur les utilisateur...

    Mais cette démarche ne fonctionne pas, avez vous une idée ?

    Je vous remercie .

    -
    Edité par Cielphis 22 février 2019 à 16:06:26

    • Partager sur Facebook
    • Partager sur Twitter
      22 février 2019 à 15:46:10

      Avec ces bouts de codes dans tout les sens, je me perd un peu ^^ tu saurais résumer en une ligne ce que tu cherche à faire, en une autre ligne le problème ?
      • Partager sur Facebook
      • Partager sur Twitter
        22 février 2019 à 16:32:53

        Re bonjour ! 

        Ouais, c'est compliquer à tout résumer. J'essaye à chaque fois de mettre tout les éléments nécessaire à la compréhension, qu'au final c'est trop vaste qu'on ne comprend plus grand chose XD . Va savoir où se trouve l'erreur dans tout ça ^^?

        Mais j'ai trouver la solution . 

        En quelque ligne, je ne pouvais pas utiliser cette propriété sur un objet vide :

        HttpContext.User.Identity.Name



         

        Je ne comprenait pas pourquoi,  mon objet : 

        viewModel.users = userMethod.ObtainUsers(HttpContext.User.Identity.Name);
        

        renvoyer null .Et j'avais besoin de HttpContext.User.Identity.Name pour récupérer l'id de l'utilisateur connecter pour ma méthode. 

        public users ObtainUsers(string idString)

        Mon erreur se trouvait qu'à aucun moment j'ai instancier userMethod (je pensais qu'instancier viewModel aurait était suffisant. Mais finalement on peut pas utilisé une méthode si l'objet n'est pas instancier)

        donc il suffit de faire dans LoginController

        public class LoginController : Controller
            {
        //les variables/attributs
                private DbEntities db = new DbEntities();
                private UserMethod userMethod= new UserMethod();
        
        //les méthodes
         ...
        }

        à la place de :

        public class LoginController : Controller
            {
        //les variables/attributs
                private DbEntities db = new DbEntities();
                private UserMethod userMethod;
        
        //les méthodes
         ...
        }



        Mais au final, j'ai retenu plutôt une autre solution (mettre la classe UserMethod en static, comme ça je ne suis pas obligé d'instancier la class pour utilisé la méthode ObtainUser)  :

        namespace ProjetLocalisationSass.Models
        {
            
        
            public static class UserMethod
            {
                private static DbEntities db = new DbEntities();
         
        
                public static users ObtainUsers(int id)
                {
                    return db.users.FirstOrDefault(u => u.id == id);
                }
        
                public static users ObtainUsers(string idString)
                {
                    int id;
                    if (int.TryParse(idString, out id))
                        return ObtainUsers(id);
                    return null;
                }
        
        }

        Merci, d'avoir essayer de comprendre mon code ^^'



        -
        Edité par Cielphis 22 février 2019 à 16:35:06

        • Partager sur Facebook
        • Partager sur Twitter

        récupérer l'objet user pour ma View

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown