Comment ajouter des "property" à un "profile" d'utilisateur [Résolu]

Messages postés
411
Date d'inscription
dimanche 1 février 2004
Dernière intervention
8 mai 2010
- - Dernière réponse : kidkashy
Messages postés
5
Date d'inscription
lundi 27 mars 2006
Dernière intervention
20 septembre 2011
- 19 sept. 2011 à 14:34
Bonjour,
Je travaille sur VS 2005 en VB, et j'utilise la sécurité du framawork 2.0.
J'ai besoin qu'un utilisateur-adhérent soit repéré par d'autres paramètres que ceux de la table aspnet_MemberShip,
dans mon exemple, le "code postal" et "la ville".
 J'ai donc rajouté au Web.config :
<profiledefaultProvider="SqlProvider">
      <providers>
      <clear />
      <addname="SqlProvider"
         type="System.Web.Profile.SqlProfileProvider"
         connectionStringName="LocalSqlServer"
         applicationName="SampleApplication"
         description="SqlProfileProvider for SampleApplication" />
   </providers>

   <properties>
      <addname="CP" />
      <addname="Ville" />
   </properties>
</profile>
Ensuite, il est très facile d'alimenter la table "aspnet_Profile" de la base de sécurité ASPNETDB.MDF par la simple ligne : 
            Profile.Ville = "Amiens"
et de récupèrer cette valeur ensuite par 
      MonLabel.Text = Profile.Ville

Mais L'application impute alors cette propriété à l'UTILISATEUR CONNECTE !
Comment l'administrateur peut-il imputer cette propriété à un utilisateur quelconque ?

La classe "Profile" ne convient peut-être pas, d'ailleurs, la doc dit :
La fonctionnalité de profil ASP.NET associe des informations à un utilisateur donné et les stocke sous un format persistant.
Mais aussi :
ASP.NET fait automatiquement correspondre l'utilisateur actuel, qu'il soit anonyme ou connecté, aux informations personnelles qui sont stockées dans leur compte d'utilisateur.
Alors, comment faire, quelle classe utiliser ? Faut-il communiquer avec cette base de façon classique (requête,commande etc) ? Quelqu'un a-il une lumière à apporter ?
merci
Gilles
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
411
Date d'inscription
dimanche 1 février 2004
Dernière intervention
8 mai 2010
3
Merci
bon, tu es un chef, voici que tout marche et que tout s'explique :
dans le web.config :
 
<!-- ne mas mettre
<providers>
      <clear />
      <addname= "SqlProvider"
         type="System.Web.Profile.SqlProfileProvider"
         connectionStringName="LocalSqlServer"
         applicationName="SampleApplication"
         description="SqlProfileProvider for SampleApplication" />
   </providers>
c'est cette mention qui faisait écrire une 2e fois l'user avec une UserId différente et qui fichait le bazard !
-->
        
         
         
       

     

La syntaxe de la page :
      Dim CP As String = "25100"   
      Dim Ville As String = "Amiens"   
      Dim monUser As String = "monUser"        
      Dim prof As ProfileBase = ProfileBase.Create(monUser)          
          prof.SetPropertyValue("CP", CP)
            prof.SetPropertyValue("Ville", Ville)
              prof.Save() 'eh oui !!

voilà, comme quoi on peut s'arracher les cheveux, ça finit par marcher !
-----
Pour le livre de G.Nicot, il n'est pas pour toi, mais par exemple pour les gens qui veulent passer de l'asp à asp.net, les débutants-initiés mais pas les super confirmés. Les approfondissements ne sont qu'effleurés.

Merci à toi et à une autre fois
@+Gilles

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 111 internautes nous ont dit merci ce mois-ci

Commenter la réponse de SuperBouly
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
16
0
Merci
Bonjour,

il me semble que le ProfileProvider par défaut est le sqlprofileprovider tu ne dois pas avoir à le spécifier dans ton web.config, mais je peux me tromper :)

en ce qui concerne les utilisateurs anonymes il faut jouer avec la propriété allowanonymous dans les properties de ton profile. En tout cas un truc avec anonymous pas loin du rien dans le code .net :-)

<hr />Cyril - MVS - MCP
Commenter la réponse de jesusonline
Messages postés
411
Date d'inscription
dimanche 1 février 2004
Dernière intervention
8 mai 2010
0
Merci
merci pour ta réponse.
Cependant je n'ai pas employé les mots exacts :
j'ai parlé de l'utilisateur connecté, je voulais dire l'utilisateur tout court, celui qui utilise la page; anonyme ou pas.
Je voudrais que l'administrateur puisse entrer les renseignements (code postal et ville par ex.) pour un adhérent.
Or si l'administrateur est connecté pour gérer ses abonnés, le code Profile.CP="14200" lui impute CP=14200 à lui-même ! Je voudrais l'imputer à un adhérent de mon choix, choisi dans le role "Adhérents" par exemple.
Pour ce qui est du ProfileProvider, je continue à chercher dans ta direction.
merci
@+Gilles
Commenter la réponse de SuperBouly
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
16
0
Merci
Ahh d'accord, j'avais pas compris

Tu dois pouvoir avoir ton bonheur avec les méthodes static de System.Web.Profile.ProfileManager tu dois avoir un findMember ou un truc du genre et ensuite modifier tout ca :-)

<hr />Cyril - MVS - MCP
Commenter la réponse de jesusonline
Messages postés
411
Date d'inscription
dimanche 1 février 2004
Dernière intervention
8 mai 2010
0
Merci
Merci pour la pisteProfileManager.
Bon, en suivant la piste ProfileManager, j''ai trouvé la syntaxe, pour les internautes que ça intéresse, je la mentionne en fin de message.
Cependant  le mécanisme me paraît bizarre :
J'ajoute un adhérent (UserName = "monAdherent") dans la table aspnet_user à l'aide d'un contrôle CreateUserWizard que je bricole en rajoutant 2 textbox tbCP et tbVille destinées à recevoir le Code Postal et la ville.
Tout marche bien, mais 2 lignes apparaissent dans la table aspnet_user, portant des UserId différents pour mon seul UserName
Est-ce mon code qui provoque ça, ou est-ce normal !! J'aime autant dire que ça cree des problèmes d'affichage de requêtes dans les gridview!
Voici le code :
Protected Sub CreateUserWizard1_CreatedUser(ByVal sender As Object, ByVal e As System.EventArgs) Handles CreateUserWizard1.CreatedUser
        'enregistrement du nouveau client
        Dim sUser() As String = {CType(sender, CreateUserWizard).UserName}
        Dim Rol As String = "Clients"     'un role "clients" a été défini par ailleurs
        Roles.AddUsersToRole(sUser, Rol)
        'adjonction des paramètres supplémentaires : Ville et CP
        '1.lecture
        Dim tbVille As TextBox = CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("tbVille")
        Dim Ville As String = tbVille.Text
        Dim tbCP As TextBox = CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("tbCP") 
        Dim CP As String = tbCP.Text
        '2. définition du profil-utilisateur
'(EST-CE CECI QUI EST INCORRECT ?) 
        Dim MonUser As String = sUser(0) 
        Dim provi As ProfileProvider = ProfileManager.Provider 
        Dim prof As New ProfileBase
        prof = ProfileBase.Create(MonUser)
        '3 ecriture des valeurs dans ce profile 
        Dim NouvPValues As New SettingsPropertyValueCollection 
        Dim pvalues As SettingsPropertyValueCollection = provi.GetPropertyValues(prof.Context, ProfileBase.Properties)
 
        For Each pval As SettingsPropertyValue In pvalues 
            Dim NouvValue As New SettingsPropertyValue(pval.Property)
            If pval.Name = "CP" Then
                NouvValue.PropertyValue = CP
            ElseIf pval.Name = "Ville" Then
                NouvValue.PropertyValue = Ville
            End If
            NouvPValues.Add(NouvValue)
        Next
        provi.SetPropertyValues(prof.Context, NouvPValues)
 
'OUF ceci, pour tout dire, me paraît laborieux et ne me paraît pas être une simplification de la vie, je dois trouver mieux !
@+Gilles
Commenter la réponse de SuperBouly
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
16
0
Merci
Bonjour,

tu es dans l'évenement creatEDUser ... ton user est donc déjà créer, donc la ligne ProfileBase.Create("") est inutile ! Tu dois récuperer une instance de l'user en cours, peut etre qu'il est dans l'argument e ou dans le createuserwizard ou alors il faut peut etre utiliser une méthode findUserByName du profileProvider.

<hr />Cyril - MVS - MCP
Commenter la réponse de jesusonline
Messages postés
411
Date d'inscription
dimanche 1 février 2004
Dernière intervention
8 mai 2010
0
Merci
ok, je me doutais...au flair
Mais la bonne commande *GetProfileByUserName n'est pas membre de profileBase mais de ProfileManager et je m'emmêle les crayons dans toutes ces classes, je dois repartir sur des bases + saines!
Je viens de voir que c'est très bien traité dans le gros et très bon bouquin (que je conseille même -surtout- aux débutants) de G.NICOT. Donc je me replonge.
Si je trouve le temps, je ferai une source, car ce serait un peu long ici.
@+Gilles
Commenter la réponse de SuperBouly
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
16
0
Merci
tu peux me donner la référence de ce bouquin ? (un lien vers amazon en gros :p) car je pense que ca interesse d'autres personnes :-)

<hr />Cyril - MVS - MCP
Commenter la réponse de jesusonline
Messages postés
411
Date d'inscription
dimanche 1 février 2004
Dernière intervention
8 mai 2010
0
Merci
Aie, aie aie... je viens de m'apercevoir que l'exemple traité ne traite que de la classe "Profile" et que donc chaque utilisateur met a jour ses propres paramètres (facile !!).
 Je suis donc au point mort pour l'instant.
Je donne quand même le lien Amazon de ce très bon livre, écrit en (bon) français et pas très cher.
http://www.amazon.fr/Visual-Basic-1C%C3%A9d%C3%A9rom-Gilles-Nicot/dp/2742963367/sr=1-1/qid=1168531919/ref=sr_1_1/402-6549801-8072109?ie=UTF8&s=books
@+Gilles
Commenter la réponse de SuperBouly
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
16
0
Merci
Je viens de regarder dans Visual Studio (juste l'intelisense j'ai pas le temps de faire un test complet :s)

mais j'ai l'impression de m'etre gourré tout à l'heure, le ProfileBase.Create("toto"); ne créer pas un nouveau profile mais une nouvelle instance du profile pour l'utilisateur spécifié, d'après ce que j'ai compris cela permet de charger le profile spécifié à partir des infos de la base de données.

En ce qui concerne le code plus haut tu as du oublier le save et fais des trucs en trop. En gros je pense que :

ProfileBase profile = ProfileBase.Create("toto");
profile.properties["CP"] = 45655:
profile.Save();

ca devrait largement suffire :)

Pour le bouquin je connais pas, et il me semble pas avoir encore vu un bon bouquin sur ASP.net 2.0 en francais ... moi j'ai lu les bouquins de Dino Esposito sur ASP.net 2.0 et ils sont vraiment très bien. Et il parle longuement des différents provider :-)

>> http://www.amazon.com/Programming-Microsoft-ASP-NET-Core-Reference/dp/0735621764
>> http://www.amazon.com/Programming-Microsoft-ASP-NET-2-0-Applications/dp/0735621772
<hr />Cyril - MVS - MCP
Commenter la réponse de jesusonline
Messages postés
18
Date d'inscription
lundi 28 octobre 2002
Dernière intervention
12 mars 2007
0
Merci
Bonjour tout le monde

Moi j'ai une petite question.  Je dois ajouter qlq 300 users à ma table aspnet_user. y-a-t-il un moyen générer manuellement le userid de facon a faire un simple copier/coller directement dans la table. j'ai pas envie de me taper les 300 par l'interface asp.net 2.0.

merci d'avance

bing
Commenter la réponse de Bing2000
Messages postés
1
Date d'inscription
lundi 16 juillet 2007
Dernière intervention
16 juillet 2007
0
Merci
Salut,
J'ai un question aussi. J'ai exactement le même problème. Deux utilisateurs ayant le meme nom sont crées.
J'ai essayé de faire pareil pour résoudre le problème. Hélas, ça ne marche pas chez moi ... je me retrouve avec cette erreur ci-dessous et je n'arrive pas à voir à quoi s'est du.

if

(
/*Profile.FavoriteColor*/(
String)p.GetPropertyValue(
"FavoriteColor") !=
"")  -> Error generé
Error Description : The SSE Provider did not find the database file specified in the connection string. At the configured trust level (below High trust level), the SSE provider can not automatically create the database file.

Code Avant : (creation double de l'utulisateur)
<

profiledefaultProvider ="
MyProfileProvider"
><

providers><

clear /><

add

name="
MyProfileProvider"

type="
System.Web.Profile.SqlProfileProvider"

applicationName="
MediterrumWorks"

connectionStringName="
MediterrumWorksConnectionString"
/></

providers> <

properties><

add

name="
FavoriteColor"

type="
String"

serializeAs="
String"

defaultValue="
BlueSkin"

allowAnonymous="
false"
/></

properties></

profile>

Code Après ( erreur generé ... )

<

profile> <

properties><

add

name="FavoriteColor"

type="String"

serializeAs="String"

defaultValue="BlueSkin"

allowAnonymous="false" /></

properties></

profile>

Est-ce que vous avez une petite  idée ? ça m'aiderait bcp, ça fait toute la matinée que je bloque dessus lol

Merci d'avance,

Emeraude.
Commenter la réponse de cs_emeraud
Messages postés
5
Date d'inscription
lundi 27 mars 2006
Dernière intervention
20 septembre 2011
0
Merci
Salut tt le mon
comment creer createuserwizar avec l'envoi d'email de confirmation
Commenter la réponse de kidkashy

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.