Comment ajouter des "property" à un "profile" d'utilisateur

Résolu
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010 - 10 janv. 2007 à 08:40
kidkashy Messages postés 5 Date d'inscription lundi 27 mars 2006 Statut Membre 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

13 réponses

SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
11 janv. 2007 à 20:34
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
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
10 janv. 2007 à 11:28
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
0
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
10 janv. 2007 à 13:12
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
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
10 janv. 2007 à 14:00
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
11 janv. 2007 à 09:27
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
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
11 janv. 2007 à 10:18
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
0
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
11 janv. 2007 à 14:59
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
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
11 janv. 2007 à 15:05
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
0
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
11 janv. 2007 à 17:17
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
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
11 janv. 2007 à 17:49
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
0
Bing2000 Messages postés 18 Date d'inscription lundi 28 octobre 2002 Statut Membre Dernière intervention 12 mars 2007
12 mars 2007 à 10:51
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
0
cs_emeraud Messages postés 1 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 16 juillet 2007
16 juil. 2007 à 14:09
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.
0
kidkashy Messages postés 5 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 20 septembre 2011
19 sept. 2011 à 14:34
Salut tt le mon
comment creer createuserwizar avec l'envoi d'email de confirmation
0
Rejoignez-nous