Crazione utente in db con CreateUserWizard

martedì 05 gennaio 2010 - 09.48

Cyberking Profilo | Junior Member

Ciao a tutti,
sto in questo periodo cercando un pò di tempo per staccarmi da asp e passare una volta per tutti a .net
Ho scaricato il web developer 2008 e dopo aver capito come funzionano le master page sto tentando di fare un web form per la registrazione di un nuovo utente.
Nella casella degli utenti ho visto che esiste l'oggetto CreateUserWizard, quindi ho provato a inserirlo e a fare qualche prova.
Ho cercato naturalmente prima un pò di documentazione su come funzionava, ma ci sono un paio di cose che non ho capito
1) non ho trovato in nessuna documentazione come inserire i dati in un database, mi sembra più che altro che questo oggetto sia un form precompilato con dei controlli, solo in un caso ho letto che è possibile settare tramite "amministra sito web" i dati in un db, ma dopo aver passato un bel pò di ore a capire come funzionava il pannello non ho trovato la soluzione.
2) Poi nonostante non abbia messo nessuna regular expression mi ritorna con qualsiasi password sempre questo errore "Lunghezza minima password: 7. Caratteri non alfanumerici richiesti: 1.", ho provato a mettere anche una regular expression nelle proprietà ma nulla da fare il messaggio è sempre lo stesso
3) Ho visto che c'è una proprietà maildefinition , basta riempire i campi per far partire la mail o devo attivare qualche altra cosa? Il testo del messaggio devo darlo solo con il bodyfilename o posso anche darlo da codice? perchè vorrei creare un testo con un link all'interno per attivare la registrazione
4) infine cosa serve la proprietà expression in Dati

Ciao e grazie in anticipo per l'aiuto.
http://www.internetdiscount.it

FrancescoGuadagno Profilo | Senior Member

>Ciao a tutti,
Ciao
>1) non ho trovato in nessuna documentazione come inserire i dati
>in un database, mi sembra più che altro che questo oggetto sia
>un form precompilato con dei controlli, solo in un caso ho letto
>che è possibile settare tramite "amministra sito web" i dati
>in un db, ma dopo aver passato un bel pò di ore a capire come
>funzionava il pannello non ho trovato la soluzione.
Il CreateUserWizard è in effetti un controllo che si occupa sia di offrirti uno stile "preconfigurato" e in ogni caso anche un comportamento di default. Questo vuol dire che, oltre che piazzarlo su una pagina web, tu non devi fare altro. Al click sul pulsante di creazione utente, i dati vengono inseriti su database. Chiarametne il corretto funzionamento presuppone due cose, primo che il database sia correttamente strutturato, secondo che nel web.config sia stato configurato tutto correttamente. Nota bene però che questi due passaggi devi farli a prescindere dal controllo CreateUserWizard, poichè vuoi utilizzare le MembershipAPI. Il fatto di creare invece un utente da "Amministra sito web" è un qualcosa che va al di là del tuo sito web. Il senso è questo. Se tu vuoi utilizzare la creazione di nuovi utenti come strumento amministrativo, allora non ti serve neanche il CreateUserWizard poichè "Amministra sito web me contiene uno". Se invece nel tuo sito web deve essere possibile creare nuovi utenti, poichè "Amministra sito web" non si può esporre, allora devi fare uso di CreateUserWizard.
>2) Poi nonostante non abbia messo nessuna regular expression
>mi ritorna con qualsiasi password sempre questo errore "Lunghezza
>minima password: 7. Caratteri non alfanumerici richiesti: 1.",
>ho provato a mettere anche una regular expression nelle proprietà
>ma nulla da fare il messaggio è sempre lo stesso
Questo tipende dal secondo prerequisito che ti dicevo. E' una impostazione del web.config.
Ti allego un codice di esempio
<membership defaultProvider="SqlProvider" >
<providers> <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="LocalSqlServer" enablePasswordRetrieval="true" enablePasswordReset="false" requiresQuestionAndAnswer="true" passwordFormat="Clear" requiresUniqueEmail="true" passwordFormat="Hashed" minRequiredNonalphanumericCharacters="0" minRequiredPasswordLength="7" /> </providers> </membership>

I parametri possibili sono tanti.

>3) Ho visto che c'è una proprietà maildefinition , basta riempire
>i campi per far partire la mail o devo attivare qualche altra
>cosa? Il testo del messaggio devo darlo solo con il bodyfilename
>o posso anche darlo da codice? perchè vorrei creare un testo
>con un link all'interno per attivare la registrazione
Normalmente occorre configurare la sezione relativa all'smtp
<system.net> <mailSettings> <smtp> <network host="relayServerHostname" port="portNumber" userName="username" password="password" /> </smtp> </mailSettings> </system.net>
Mail definition è assolutamente personalizzabile.

>4) infine cosa serve la proprietà expression in Dati
Dove sarebbe?

Cyberking Profilo | Junior Member

Mille grazie AmadeusBA
Intanto ho capito che sono due cose diverse, a me interessa direttamente scrivere nel db, non creare utenti amminstratori, voglio creare degli utenti per il sito che poi si possano loggare e accedere a determinati risorse o postare qualcosa.
Quindi se ho capito bene devo configurare tutto tramite il web.config.....provo a capire come modificare il tuo esempio e magari cerco un pò di documentazione (magari se hai un link da passarmi su come inserire nel db).
Approfitto per farti una domanda su questa cosa, ma se con questo sistema non riesco a fare un controllo se l'username o l'email sono già presenti nel db?
Mi conviene fare un form direttamente e gestire io il controllo sui valori immessi nei campi e poi sul db?

Grazie anche per l'email....ora cerco prima di capire come fare l'insert nel db...poi quello è un problema secondario...in questo momento.

la proprietà expression in Dati ce l'ho selezionando l'oggetto sulla pagina e poi vedendo tutti le propietà nella barra delle proprietà di web develper, prima di layout.

Intanto grazie ancora
http://www.gurutour.it

FrancescoGuadagno Profilo | Senior Member

>Mille grazie AmadeusBA
>Intanto ho capito che sono due cose diverse, a me interessa direttamente
>scrivere nel db, non creare utenti amminstratori, voglio creare
>degli utenti per il sito che poi si possano loggare e accedere
>a determinati risorse o postare qualcosa.
Ok, quindi sembra che tu abbia effettivamente bisogno di una pagina di iscrizione in cui posizionare il CreateUserWizard

>Quindi se ho capito bene devo configurare tutto tramite il web.config.....provo
>a capire come modificare il tuo esempio e magari cerco un pò
>di documentazione (magari se hai un link da passarmi su come
>inserire nel db).
Ripeto, se utilizzi il CreateUserWizard, non ti servono query di inserimento. E' tutto embedded

>Approfitto per farti una domanda su questa cosa, ma se con questo
>sistema non riesco a fare un controllo se l'username o l'email
>sono già presenti nel db?
Anche questi, se utilizzi CreateUserWizard e quindi MembershipAPI sono comportamenti embedded.

>Mi conviene fare un form direttamente e gestire io il controllo
>sui valori immessi nei campi e poi sul db?
Direi che non ne vedo il motivo

>la proprietà expression in Dati ce l'ho selezionando l'oggetto
>sulla pagina e poi vedendo tutti le propietà nella barra delle
>proprietà di web develper, prima di layout.

scusami, ma continuo a non trovare questa proprietà

>Intanto grazie ancora
di niente ;)

Cyberking Profilo | Junior Member

Grazie ancora....
provo a fare qualche altro test con CreateUserWizard con tutto quello che mi hai detto cercando di inserire direttamente i dati nel mio db

Eccoti allegato un print screen

Ciao e grazie ancora
http://www.gurutour.it

Cyberking Profilo | Junior Member

In qualche modo, grazie anche ai tuoi suggerimenti sono riuscito a fare un insert nel db, quello che non capivo, era come collegarsi al database.....in effetti non mi sono riuscito a collegare al mio database (access) ma ha crato lui una rb aspnetdb.mdf con una sarie di tabelle dentro, tra cui user in cui ha messo i dato dell'utente, onestamente credo di non averlo letto da nessuna parte che creava lui questo aspnetdb, avewvo letto dei post che parlavano di questo ma credevo che era un db creato da altre persone.
Quindi, vorrei chiedere a questo punto:
E' possibile collegarsi a un proprio db, magari access, come sto facendo io

Questo è quello che ho adesso nel web.config
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
<providers>
<add connectionStringName="LocalSqlServer" enablePasswordRetrieval="true"
enablePasswordReset="false" requiresQuestionAndAnswer="true"
passwordFormat="Clear" requiresUniqueEmail="true" minRequiredNonalphanumericCharacters="0"
minRequiredPasswordLength="7" name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" />
</providers>
</membership>

Ora sto cercando di mandare anche l'email...e ho trovato un script molto interessante
http://www.aspcode.net/Requiring-email-verification-for-new-accounts.aspx
Anche se per ora mi sta dando errore degli errori


protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
CreateUserWizard cuw = (CreateUserWizard)sender;
MembershipUser user = Membership.GetUser(cuw.UserName);
Guid userId = (Guid)user.ProviderUserKey;
string sHeader = "";
string sBody = "";
MailHelper.NewUserMail(userId.ToString(), ref sHeader, ref sBody);
MyContext.SendEmail(cuw.Email,
sHeader,sBody, true);
}


Errore 1 Impossibile trovare il tipo o il nome dello spazio dei nomi 'MembershipUser'; probabilmente manca una direttiva using o un riferimento a un assembly C:\Inetpub\wwwroot\prova1\CreaUtente.aspx.cs 18 9
Errore 2 Il nome 'Membership' non esiste nel contesto corrente C:\Inetpub\wwwroot\prova1\CreaUtente.aspx.cs 18 31
Errore 3 Il nome 'MailHelper' non esiste nel contesto corrente C:\Inetpub\wwwroot\prova1\CreaUtente.aspx.cs 22 9
Errore 4 Il nome 'MyContext' non esiste nel contesto corrente C:\Inetpub\wwwroot\prova1\CreaUtente.aspx.cs 23 9






http://www.gurutour.it

FrancescoGuadagno Profilo | Senior Member

>In qualche modo, grazie anche ai tuoi suggerimenti sono riuscito
>a fare un insert nel db, quello che non capivo, era come collegarsi
>al database.....in effetti non mi sono riuscito a collegare al
>mio database (access) ma ha crato lui una rb aspnetdb.mdf con
>una sarie di tabelle dentro, tra cui user in cui ha messo i dato
>dell'utente, onestamente credo di non averlo letto da nessuna
>parte che creava lui questo aspnetdb, avewvo letto dei post che
>parlavano di questo ma credevo che era un db creato da altre
>persone.
Difatti è il database di cui ti parlavo, necessariamente SQL (in modalità disconnessa, con il file mdf, oppure connessa, sul tuo eventuale server sql). Affinchè le membership API possano funzionare correttamente, è necessario che esista un database strutturato opportunamente, ovvero contenga tutte le tabelle con prefisso aspnet_ che vedi nell'mdf creato. Per poter utilizzarlo al meglio, ti consiglio di seguire una guida passo-passo, nonchè fare una ricerca sul programma aspnet_regsql.exe (che trovi in c:\windows\microsoft.net\framework\v2.0xxxx) che permette appunto di creare o cancellare la struttura di database di cui parliamo, in location a tua scelta.
>Quindi, vorrei chiedere a questo punto:
>E' possibile collegarsi a un proprio db, magari access, come
>sto facendo io
se dai un'occhiata al link che ti passo, al punto 8 è discussa questa problematica.
http://www.4guysfromrolla.com/articles/120705-1.aspx
Io sinceramente non ne ho mai avuto l'esigenza. Fammi sapere il risultato che ottieni!
>
>Questo è quello che ho adesso nel web.config
><membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
> <providers>
><add connectionStringName="LocalSqlServer" enablePasswordRetrieval="true"
>enablePasswordReset="false" requiresQuestionAndAnswer="true"
>passwordFormat="Clear" requiresUniqueEmail="true" minRequiredNonalphanumericCharacters="0"
>minRequiredPasswordLength="7" name="SqlProvider" type="System.Web.Security.SqlMembershipProvider"
>/>
> </providers>
> </membership>
>
>Ora sto cercando di mandare anche l'email...e ho trovato un script
>molto interessante
>http://www.aspcode.net/Requiring-email-verification-for-new-accounts.aspx
>Anche se per ora mi sta dando errore degli errori
>
>
>protected void CreateUserWizard1_CreatedUser(object sender, EventArgs
>e)
>{
> CreateUserWizard cuw = (CreateUserWizard)sender;
> MembershipUser user = Membership.GetUser(cuw.UserName);
> Guid userId = (Guid)user.ProviderUserKey;
> string sHeader = "";
> string sBody = "";
>MailHelper.NewUserMail(userId.ToString(), ref sHeader, ref sBody);
> MyContext.SendEmail(cuw.Email,
> sHeader,sBody, true);
>}
>
>
>Errore 1 Impossibile trovare il tipo o il nome dello spazio dei
>nomi 'MembershipUser'; probabilmente manca una direttiva using
>o un riferimento a un assembly C:\Inetpub\wwwroot\prova1\CreaUtente.aspx.cs 18 9
>Errore 2 Il nome 'Membership' non esiste nel contesto corrente C:\Inetpub\wwwroot\prova1\CreaUtente.aspx.cs 18 31
>Errore 3 Il nome 'MailHelper' non esiste nel contesto corrente C:\Inetpub\wwwroot\prova1\CreaUtente.aspx.cs 22 9
>Errore 4 Il nome 'MyContext' non esiste nel contesto corrente C:\Inetpub\wwwroot\prova1\CreaUtente.aspx.cs 23 9

Bè sembra solo questione di reference...

Cyberking Profilo | Junior Member

>>In qualche modo, grazie anche ai tuoi suggerimenti sono riuscito
>>a fare un insert nel db, quello che non capivo, era come collegarsi
>>al database.....in effetti non mi sono riuscito a collegare al
>>mio database (access) ma ha crato lui una rb aspnetdb.mdf con
>>una sarie di tabelle dentro, tra cui user in cui ha messo i dato
>>dell'utente, onestamente credo di non averlo letto da nessuna
>>parte che creava lui questo aspnetdb, avewvo letto dei post che
>>parlavano di questo ma credevo che era un db creato da altre
>>persone.
>Difatti è il database di cui ti parlavo, necessariamente SQL
>(in modalità disconnessa, con il file mdf, oppure connessa, sul
>tuo eventuale server sql). Affinchè le membership API possano
>funzionare correttamente, è necessario che esista un database
>strutturato opportunamente, ovvero contenga tutte le tabelle
>con prefisso aspnet_ che vedi nell'mdf creato. Per poter utilizzarlo
>al meglio, ti consiglio di seguire una guida passo-passo, nonchè
>fare una ricerca sul programma aspnet_regsql.exe (che trovi in
>c:\windows\microsoft.net\framework\v2.0xxxx) che permette appunto
>di creare o cancellare la struttura di database di cui parliamo,
>in location a tua scelta.

ho dato un sguardo al rapido al link che mi hai dato e mi sebra di capire quindi che a un db di access potrei anche collegarmi, ma come dici tu devo per forza avere quelle tabelle, quindi a questo punto, o importo nel mio db tutte le tabelle che crea lui in aspnetdb.mdf o lascio la connessione a quel db e le mie future tabelle le creo li dentro
<add name="LocalAccessDatabase" connectionString="~/App_Data/ASPNetDB.mdb" providerName="System.Data.OleDb"/>
Ora provo a dare anche uno sguardo a aspnet_regsql.exe

>>Quindi, vorrei chiedere a questo punto:
>>E' possibile collegarsi a un proprio db, magari access, come
>>sto facendo io
>se dai un'occhiata al link che ti passo, al punto 8 è discussa
>questa problematica.
>http://www.4guysfromrolla.com/articles/120705-1.aspx
>Io sinceramente non ne ho mai avuto l'esigenza. Fammi sapere
>il risultato che ottieni!
>>
>>Questo è quello che ho adesso nel web.config
>><membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
>> <providers>
>><add connectionStringName="LocalSqlServer" enablePasswordRetrieval="true"
>>enablePasswordReset="false" requiresQuestionAndAnswer="true"
>>passwordFormat="Clear" requiresUniqueEmail="true" minRequiredNonalphanumericCharacters="0"
>>minRequiredPasswordLength="7" name="SqlProvider" type="System.Web.Security.SqlMembershipProvider"
>>/>
>> </providers>
>> </membership>
>>
>>Ora sto cercando di mandare anche l'email...e ho trovato un script
>>molto interessante
>>http://www.aspcode.net/Requiring-email-verification-for-new-accounts.aspx
>>Anche se per ora mi sta dando errore degli errori
>>
>>
>>protected void CreateUserWizard1_CreatedUser(object sender, EventArgs
>>e)
>>{
>> CreateUserWizard cuw = (CreateUserWizard)sender;
>> MembershipUser user = Membership.GetUser(cuw.UserName);
>> Guid userId = (Guid)user.ProviderUserKey;
>> string sHeader = "";
>> string sBody = "";
>>MailHelper.NewUserMail(userId.ToString(), ref sHeader, ref sBody);
>> MyContext.SendEmail(cuw.Email,
>> sHeader,sBody, true);
>>}
>>
>>
>>Errore 1 Impossibile trovare il tipo o il nome dello spazio dei
>>nomi 'MembershipUser'; probabilmente manca una direttiva using
>>o un riferimento a un assembly C:\Inetpub\wwwroot\prova1\CreaUtente.aspx.cs 18 9
>>Errore 2 Il nome 'Membership' non esiste nel contesto corrente C:\Inetpub\wwwroot\prova1\CreaUtente.aspx.cs 18 31
>>Errore 3 Il nome 'MailHelper' non esiste nel contesto corrente C:\Inetpub\wwwroot\prova1\CreaUtente.aspx.cs 22 9
>>Errore 4 Il nome 'MyContext' non esiste nel contesto corrente C:\Inetpub\wwwroot\prova1\CreaUtente.aspx.cs 23 9
>
>Bè sembra solo questione di reference...

Mi sembra che in una delle prove che avevo fatto, l'avevo aggiunto il reference ma mi dava ancora errore....riprovo

GRAZIE ANCORA
http://www.gurutour.it

FrancescoGuadagno Profilo | Senior Member

>ho dato un sguardo al rapido al link che mi hai dato e mi sebra
>di capire quindi che a un db di access potrei anche collegarmi,
>ma come dici tu devo per forza avere quelle tabelle, quindi a
>questo punto, o importo nel mio db tutte le tabelle che crea
>lui in aspnetdb.mdf o lascio la connessione a quel db e le mie
>future tabelle le creo li dentro

Fidati, hai tutto da guadagnare nell'utilizzare quella struttura. Considera che con quelle stesse tabelle puoi gestire le autenticazioni su più applicazioni, per dirne una...

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5