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

ASP.NET Discussion :

Le ApplicationID dans le MemberShip


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Le ApplicationID dans le MemberShip
    Salut

    J'ai activé le MemberShip pour mon ensemble de site.
    Pour planter un epu le contexte, j'ai fait un site qui marche avec une seule page, mais pour plusieur DNS. en gros la page commence par regarder ce qu'il y a comme DNS et elle sait ensuite ce qu'elle doit faire, le détail de chaque page étant stocké en BDD avec des composants qui font le reste.

    Bref, mon souci se pose sur l'identification des braves petits visiteurs (que l'on espère nombreux).

    Si un gars vient sur le site 1 et prend le login "tartemolle" et qu'il veux prendre le même login pour le site 2, ben le CreateWizardUser lui explique que c'est pas possible.
    Dans la table AspNet_Users il y a un index UNIQE qui prend en compte le UserId (login que l'on choisi) et le ApplicationID.

    J'ai cru que cet ApplicationID était rataché à un site au sens IIS du terme. Donc j'ai modifié la configuration de mon IIS et au lieu de faire réagir le même site à plusieurs DNS, j'ai fait plusieurs sites pointant sur le même répertoire. Ben ça fait pareil.

    Et puis j'ai retrouné la MSDN (encore une fois, elle fatigue la pauvre.... mais elle ne s'appelle pas Thérèse !), mais y a pas grand chose sur le strcture de donnée, GOOGLE ne m'en a pas appris beaucoup plus. Visiblement lien entre cet ApplicationID et le MemberShip est trés secret.

    Pouvez vous m'aider ?

  2. #2
    Membre éprouvé

    Homme Profil pro
    kiné passionné de dev
    Inscrit en
    Mars 2006
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : kiné passionné de dev

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 570
    Billets dans le blog
    1
    Par défaut
    Mouai
    j'airrive pas a comprendre correctement ce que tu fais, plusieurs site avec une seule page etc...

    J'ai pas compris si tu avais plusieurs sites qui tournent su plusieurs serveurs différents, bref.

    Dans ton webconfig, normalement, tu as une configuration pour ton site, ton membership etc... Et tu y donner le nom de l'application, j'explique.

    Tu peux avoir 15 fois le meme site et des nom d'application différents, meme si tu utilises la meme base de donnée pour te connecter, un meme utilisateur devrait pouvoir s'inscrire deux fois.

    Mais si tu utilises 15sites différent, avec un meme nom d'application et une meme base de donnée, alors là, un utilisateur inscrit sur un site pour alors s'identifier sur tous les autes avec les meme données.

    Voilà la procédure stockée utilisée pour ajouter un utilisateur:
    Code sql : 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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    ALTER PROCEDURE dbo.aspnet_Membership_CreateUser
        @ApplicationName                        nvarchar(256),
        @UserName                               nvarchar(256),
        @Password                               nvarchar(128),
        @PasswordSalt                           nvarchar(128),
        @Email                                  nvarchar(256),
        @PasswordQuestion                       nvarchar(256),
        @PasswordAnswer                         nvarchar(128),
        @IsApproved                             bit,
        @CurrentTimeUtc                         datetime,
        @CreateDate                             datetime = NULL,
        @UniqueEmail                            int      = 0,
        @PasswordFormat                         int      = 0,
        @UserId                                 uniqueidentifier OUTPUT
    AS
    BEGIN
        DECLARE @ApplicationId uniqueidentifier
        SELECT  @ApplicationId = NULL
     
        DECLARE @NewUserId uniqueidentifier
        SELECT @NewUserId = NULL
     
        DECLARE @IsLockedOut bit
        SET @IsLockedOut = 0
     
        DECLARE @LastLockoutDate  datetime
        SET @LastLockoutDate = CONVERT( datetime, '17540101', 112 )
     
        DECLARE @FailedPasswordAttemptCount int
        SET @FailedPasswordAttemptCount = 0
     
        DECLARE @FailedPasswordAttemptWindowStart  datetime
        SET @FailedPasswordAttemptWindowStart = CONVERT( datetime, '17540101', 112 )
     
        DECLARE @FailedPasswordAnswerAttemptCount int
        SET @FailedPasswordAnswerAttemptCount = 0
     
        DECLARE @FailedPasswordAnswerAttemptWindowStart  datetime
        SET @FailedPasswordAnswerAttemptWindowStart = CONVERT( datetime, '17540101', 112 )
     
        DECLARE @NewUserCreated bit
        DECLARE @ReturnValue   int
        SET @ReturnValue = 0
     
        DECLARE @ErrorCode     int
        SET @ErrorCode = 0
     
        DECLARE @TranStarted   bit
        SET @TranStarted = 0
     
        IF( @@TRANCOUNT = 0 )
        BEGIN
    	    BEGIN TRANSACTION
    	    SET @TranStarted = 1
        END
        ELSE
        	SET @TranStarted = 0
     
        EXEC dbo.aspnet_Applications_CreateApplication @ApplicationName, @ApplicationId OUTPUT
     
        IF( @@ERROR <> 0 )
        BEGIN
            SET @ErrorCode = -1
            GOTO Cleanup
        END
     
        SET @CreateDate = @CurrentTimeUtc
     
        SELECT  @NewUserId = UserId FROM dbo.aspnet_Users WHERE LOWER(@UserName) = LoweredUserName AND @ApplicationId = ApplicationId
        IF ( @NewUserId IS NULL )
        BEGIN
            SET @NewUserId = @UserId
            EXEC @ReturnValue = dbo.aspnet_Users_CreateUser @ApplicationId, @UserName, 0, @CreateDate, @NewUserId OUTPUT
            SET @NewUserCreated = 1
        END
        ELSE
        BEGIN
            SET @NewUserCreated = 0
            IF( @NewUserId <> @UserId AND @UserId IS NOT NULL )
            BEGIN
                SET @ErrorCode = 6
                GOTO Cleanup
            END
        END
     
        IF( @@ERROR <> 0 )
        BEGIN
            SET @ErrorCode = -1
            GOTO Cleanup
        END
     
        IF( @ReturnValue = -1 )
        BEGIN
            SET @ErrorCode = 10
            GOTO Cleanup
        END
     
        IF ( EXISTS ( SELECT UserId
                      FROM   dbo.aspnet_Membership
                      WHERE  @NewUserId = UserId ) )
        BEGIN
            SET @ErrorCode = 6
            GOTO Cleanup
        END
     
        SET @UserId = @NewUserId
     
        IF (@UniqueEmail = 1)
        BEGIN
            IF (EXISTS (SELECT *
                        FROM  dbo.aspnet_Membership m WITH ( UPDLOCK, HOLDLOCK )
                        WHERE ApplicationId = @ApplicationId AND LoweredEmail = LOWER(@Email)))
            BEGIN
                SET @ErrorCode = 7
                GOTO Cleanup
            END
        END
     
        IF (@NewUserCreated = 0)
        BEGIN
            UPDATE dbo.aspnet_Users
            SET    LastActivityDate = @CreateDate
            WHERE  @UserId = UserId
            IF( @@ERROR <> 0 )
            BEGIN
                SET @ErrorCode = -1
                GOTO Cleanup
            END
        END
     
        INSERT INTO dbo.aspnet_Membership
                    ( ApplicationId,
                      UserId,
                      Password,
                      PasswordSalt,
                      Email,
                      LoweredEmail,
                      PasswordQuestion,
                      PasswordAnswer,
                      PasswordFormat,
                      IsApproved,
                      IsLockedOut,
                      CreateDate,
                      LastLoginDate,
                      LastPasswordChangedDate,
                      LastLockoutDate,
                      FailedPasswordAttemptCount,
                      FailedPasswordAttemptWindowStart,
                      FailedPasswordAnswerAttemptCount,
                      FailedPasswordAnswerAttemptWindowStart )
             VALUES ( @ApplicationId,
                      @UserId,
                      @Password,
                      @PasswordSalt,
                      @Email,
                      LOWER(@Email),
                      @PasswordQuestion,
                      @PasswordAnswer,
                      @PasswordFormat,
                      @IsApproved,
                      @IsLockedOut,
                      @CreateDate,
                      @CreateDate,
                      @CreateDate,
                      @LastLockoutDate,
                      @FailedPasswordAttemptCount,
                      @FailedPasswordAttemptWindowStart,
                      @FailedPasswordAnswerAttemptCount,
                      @FailedPasswordAnswerAttemptWindowStart )
     
        IF( @@ERROR <> 0 )
        BEGIN
            SET @ErrorCode = -1
            GOTO Cleanup
        END
     
        IF( @TranStarted = 1 )
        BEGIN
    	    SET @TranStarted = 0
    	    COMMIT TRANSACTION
        END
     
        RETURN 0
     
    Cleanup:
     
        IF( @TranStarted = 1 )
        BEGIN
            SET @TranStarted = 0
        	ROLLBACK TRANSACTION
        END
     
        RETURN @ErrorCode
     
    END

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide, ami Poulain.

    Dans certains autre post du moment, j'explique plus en détail mon principe de site, dont je suis assez fier.

    Grossièrement, j'ai fait une page unique qui va se charger de composant utilisateur en fonction de ec q'uelle va trouver dans la base de données.
    Il y a le paramettre du DNS qui est pris en compte pour savoir quoi cherche dans la base et puis il y a une QueryString qui indique quelle page il faut prendre. Le reste se gère dans la BDD et avec un Parse de control.

    Du coup, j'ai un site (au sens IIS) avec une seule page, mais plein de DNS. La masterPage et le thème sont choisi dynamiquement et pius plein d'autre trucs.

    Et dés que j'ai un nouveau truc à faire, j'ai juste un composant utilisateur à développer.


    En fait, j'ai trouvé un moyen de bricoler le nom de l'application avec cette méthode là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Membership.Provider.ApplicationName = Request.Url.Host
    Roles.Provider.ApplicationName = Request.Url.Host
    Parce que je me suis aperçu qu'il fallait gérer les utilisateurs et les role aussi.
    De fait, lorsu'il ne trouve pas l'applicaiton dans sa table, il l'a crée sinon il ajoute l'utilisateur ou le rôle avec le bon applicationId

    En tout cas merci pour ton aide.

  4. #4
    Membre éprouvé

    Homme Profil pro
    kiné passionné de dev
    Inscrit en
    Mars 2006
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : kiné passionné de dev

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 570
    Billets dans le blog
    1
    Par défaut
    ben, de rien, juste je ne comprend pas le fait que tu ais plusieurs DNS,et ou que tu passes par plusieurs DNS,
    tu peux m'éclairer?

    PS, n'oubli pas

  5. #5
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour le bouton, j'avais encore zappé, je me ramoli, surtout vu ce que je mets dans ma signature........


    Alors l'histoire des DNS, c'est simple : je fais un gros site qui parle de petites anonces, donc je développe des coposant pour gérer tout ça. On va l'appeller www.PA.com Et puis, je m'aperçois que le marché de l'auto prend de l'ampleur, amis reste un truc de petites anonces, juste spécialisé en automobile, alors je prend un DNS www.PAVROUM.com et je pointe sur la mêm page. Sauf que dans ma base, j'ai défini mes pages avec des paramètre plus précis pour gérer de l'automobile. Ensuite je m'aperçois que la moto, au sein de l'automobile, prend de l'mapleur et pof je fais un autre DNS www.PAMOTO.com et je pointe toujours ua même endroit, jsute en ajoutant des éléments dans ma BDD.

    Aprés je décline ça en ce que je veux : rencontre, immmobilier, musique, matos de sono, ....

    L'idée c'est d'avoir des composant qui gère des choses indépendament du sujet qu'elle traite. Une petite annonce, pour continuer sur le même exemple, qu'elle parle de voiture, de maison ou de gens, c'est toujours une petite annonce. Les éléments de cette PA sont différents (on va pas parler de la surface d'une femme ! ! !) mais aprés tout pour une maison c'est un entier qui donne des m², pour une voiture c'est un entier qui donne des KM et pour une Femme c'est son âge.

    Voilà, l'idée c'est ça. Maintenant, dans la pratique c'est beaucoup plus complqiué, ne serait que parce qu'il y a une base de donnée Central qui gère les choses tout à fait commune à tous les sites et une base de donéne spécifique pour chaque site, histoire de séparer un peux les choses.

    Pour conclure, l'idée n'est pas original dans mon cerveau nébuleux, malheureusement. Je n'ai fait que copier le génialissime DotNetNuke, dans son esprit.

    Est ce que cela répond à tes interrogations ?
    Si tu veux, tu peux copier........

  6. #6
    Membre éprouvé

    Homme Profil pro
    kiné passionné de dev
    Inscrit en
    Mars 2006
    Messages
    1 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : kiné passionné de dev

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 570
    Billets dans le blog
    1
    Par défaut
    Oui, ça répond tout à fait à mes interrogations.
    Pour me mettre à copier, il faudrait que je sache en faire autant

    Sinon, juste un truc, je ne pense pas que tu utilises 15000 dommaines, mais plutot un domaine et des sous-domaines. Enfin j'espère car niveau financier, c'est quand mememoins cher ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer le applicationId dans le membership
    Par zooffy dans le forum ASP.NET
    Réponses: 2
    Dernier message: 16/01/2015, 15h04
  2. Réponses: 5
    Dernier message: 09/07/2009, 18h34
  3. Login et membership dans une application asp.net 3.5
    Par tendre_amie007 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 26/05/2009, 13h15
  4. Récupération du User dans le MemberShip
    Par zooffy dans le forum ASP.NET
    Réponses: 6
    Dernier message: 12/01/2009, 10h18
  5. rediriger sur absence de role dans le MemberShip
    Par zooffy dans le forum ASP.NET
    Réponses: 16
    Dernier message: 25/06/2008, 15h38

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