IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

Creer sa procédure d'authentification avec sa propre table


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Par défaut Creer sa procédure d'authentification avec sa propre table
    Bonjour,
    je suis en train de travailler sur la mise en place d'une authentification perso basée sur ma table SQL Utilisateurs. J'utilise WCF RIA Services pour gérer ma table Utilisateurs et je dispose d'un fichier edmx.

    J'ai rajouté IAuthentication<Utilisateur>.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
      [EnableClientAccess()]
        public partial class MyAuthenticationService : LinqToEntitiesDomainService<TestAuthentificationEntities>, IAuthentication<Utilisateur>
        {
    
            // TODO:
            // Consider constraining the results of your query method.  If you need additional input you can
            // add parameters to this method or create additional query methods with different names.
            // To support paging you will need to add ordering to the 'Utilisateur' query.
            public IQueryable<Utilisateur> GetUtilisateur()
            {
                return this.ObjectContext.Utilisateur;
            }
    
            public void InsertUtilisateur(Utilisateur utilisateur)
            {
                if ((utilisateur.EntityState != EntityState.Detached))
                {
                    this.ObjectContext.ObjectStateManager.ChangeObjectState(utilisateur, EntityState.Added);
                }
                else
                {
                    this.ObjectContext.Utilisateur.AddObject(utilisateur);
                }
            }
    
            public void UpdateUtilisateur(Utilisateur currentUtilisateur)
            {
                this.ObjectContext.Utilisateur.AttachAsModified(currentUtilisateur, this.ChangeSet.GetOriginal(currentUtilisateur));
            }
    
            public void DeleteUtilisateur(Utilisateur utilisateur)
            {
                if ((utilisateur.EntityState == EntityState.Detached))
                {
                    this.ObjectContext.Utilisateur.Attach(utilisateur);
                }
                this.ObjectContext.Utilisateur.DeleteObject(utilisateur);
            }
    
            #region IAuthentication
            private Utilisateur GetUser(string userName, string mail)
            {
                return this.ObjectContext.Utilisateur.First(u => u.Nom_Utilisateur == userName && u.Email_Utilisateur == mail);
            }
    
            public Utilisateur Login(string userName, string mail, bool isPersistent, string customData)
            {
                if (this.ValidateUser(userName, mail))
                {
                    FormsAuthentication.SetAuthCookie(userName, isPersistent);
                    return this.GetUser(userName, mail);
                }
                return null;
            }
    
            private bool ValidateUser(string userName, string mail)
            {
                return this.ObjectContext.Utilisateur.Any(u => u.Email_Utilisateur == mail && u.Nom_Utilisateur == userName);
            }
    
            public Utilisateur Logout()
            {
                FormsAuthentication.SignOut();
                return null;
            }
    
            public void UpdateUser(Utilisateur user)
            {
                if ((this.ServiceContext.User == null) ||
               (this.ServiceContext.User.Identity == null) ||
               !string.Equals(this.ServiceContext.User.Identity.Name, user.Nom_Utilisateur, System.StringComparison.Ordinal))
                {
                    throw new UnauthorizedAccessException("You are only authorized to modify your own profile.");
                }
    
                this.ObjectContext.Utilisateur.AttachAsModified(user, this.ChangeSet.GetOriginal(user));
            }
    
            public Utilisateur GetUser()
            {
                throw new NotImplementedException();
            }
            #endregion
        }
    Et dans ma claase Utilisateur j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public partial class Utilisateur :IUser
        {......}
    J'ai une erreur qui me dit :
    The domain operation entry named 'UpdateUser' provides redundant functionality. Another method named 'UpdateUtilisateur' already exists. MyAuthenticationService (MyAuthenticationService\MyAuthenticationService)
    Savez quelle solution j'ai pour contrer cela ? Ou alors est ce que je pars de travers pour mettre en place ma propre authentification ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Salut,

    Si tu fais une recherche dans ton code de cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.ObjectContext.Utilisateur.AttachAsModified(currentUtilisateur, this.ChangeSet.GetOriginal(currentUtilisateur));
    En obtiens-tu une occurence ou deux ?

  3. #3
    Membre éclairé Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Par défaut
    oui j'ai enlevé les méthodes créées par VS2010 du coup c'est ok. Mais il me reste le problème qui m'oblige à faire hériter ma classe Utilisateur de IUser et redéfinir public string Name et public IEnumerable<string> Roles.

    En faite je fait tout cela pour loguer mes utilisateurs suivant leur mail et leur mot de passe mais pas avec leur login comme le propose aspnet.

    De plus comment fais tu avec les autres propriétés de tes users, les gardes tu dans le profile, as tu créé une autre table pour les garder ??

    ++

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    En fait j'ai gardé les tables ASP et les services standards qui ne me servent que pour faire l'authentification. J'ai par contre mes propres tables utilisateurs. Chacun de MES utilisateurs reçoit un lien vers un Login et Password ASP.

    A l'entrée de l'application, une fois authentifié, je recherche Userid d'Asp via le Login ASP. Ensuite je recherche à quel de MES utilisateurs correspond le UserId Asp et à partir de ce moment je n'utilise plus que mes utilisateurs.

    J'ai trouvé un avantage à distinguer MES utilisateurs des utilisateurs ASP comme ça je peux effacer un utilisateur ASP tout en gardant trace de l'historique de qui à fait quoi dans mon application. Je ne peux en effet jamais effacer un de MES utilisateurs car j'ai des foreign keys vers eux dans toutes mes tables (création et modification de chaque enregistrement)

    Je sais pas si ça t'aide, mais je sais que j'ai beaucoup chipotté pour en arriver là, avec transfert des différentes versions RIA précédentes.

  5. #5
    Membre éclairé Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Par défaut
    oui je pense que je vais faire pareil. Merci ++. Tu dev avec MVVM ?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Citation Envoyé par chris81 Voir le message
    oui je pense que je vais faire pareil. Merci ++. Tu dev avec MVVM ?

Discussions similaires

  1. Spring Securiy avec ma propre table user
    Par Feres_agent1116 dans le forum Frameworks Web
    Réponses: 0
    Dernier message: 28/04/2013, 15h44
  2. Réponses: 4
    Dernier message: 07/05/2010, 16h16
  3. [Authentification] Utiliser ses propres tables
    Par Wookai dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/10/2007, 17h05
  4. [Procédure stockée]Insert avec renvoi clé primaire?
    Par busmik dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 26/08/2004, 16h14
  5. Réponses: 19
    Dernier message: 24/05/2002, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo