4 messaggi dal 12 marzo 2010
Ciao ragazzi. Stò realizzando un'applicazione web in asp.net c# usando il framework .net 3.5. Per la login mi sono costruito una webform dove uso lato codice le classi membership Membership.ValidateUser(this.txtUsername.Text,this.txtPassword.text)
per la verifica della login.

Per la creazione degli utenti mi sono creato un'altra web form dove permetto ad un utente administrator di creare nuovi utenti con ruoli definiti separatamente tramite l'utility web di configurazione di aspnet. Le classi per la creazione sono sempre quelle fornite dalla memmership tant'è che scrivo:

MembershipCreateStatus mcs = new MembershipCreateStatus();
MembershipUser user = Membership.CreateUser(txtUsername.Text, txtPassword.text, "", txtDomandaSegreta.Text, txtRispostaSegreta.Text, true, out mcs);

Il punto è il seguente:

finchè nel web.config, relativamente alla dichiarazione del membership provider mantengo la proprietà requiresQuestionAndAnswer="false" è tutto ok.

Però mi hanno chiesto di implementare un meccanismo di recupero della password.

Allora imposto requiresQuestionAndAnswer="true" per ottenere poi a runtime il corretto funzionamento della verifica della risposta segreta anche in fase di passwordrecovery, altrimenti qualsiasi risposta metti se la prende. In creazione utente nessun problema. I problemi nascono nel momento in cui permetto all'utente di cambiare la propria password. Quando vado ad utilizzare il metodo changepassword:

bool isPasswordModified = user.ChangePassword(user.GetPassword(), txtNewPAssword);

ottengo il seguente errore: 'Il valore non può essere null.
Nome parametro: passwordAnswer'.

Ma il metodo ChangePassword non ha overload che prendono in ingresso la risposta segreta!!!! Come gliela passo stà benedetta riposta segreta che l'utente immette nella pagina? Inoltre questo pone un altro problema: non sembra esserci la possibilità di leggere la riposta segreta relativa ad un utente. Allora se volessi implementare a mano una form che realizzi una login basata sulla corrispondenza della domanda segreta come faccio????
Aiutatemi ragazzi sono nella ca**a!!!

Grazie mille a tutti!
Modificato da sileno72 il 12 marzo 2010 14.51 -
sileno72 wrote:
Ma il metodo ChangePassword non ha overload che prendono in ingresso la risposta segreta!!!!

perchè devi farti dare l'utente, con Membership.GetUser(username), che è di tipo MembershipUser.
poi dovrai usare i metodi ResetPassword(domandaSegreta). per recuperarla, c'è la proprietà PasswordQuestion, sempre su MembershipUser. .

Daniele Bochicchio (ASPItalia.com)
I libri su HTML5, WP7, ASP.NET 4.0, VB 2010, C# 4, Entity Framework
Senior Software Architect @ 5DLabs.it
4 messaggi dal 12 marzo 2010
Grazie mille Daniele!
Però ho un altro problema:

il vero problema è che per creare un meccanismo di validazione basato sulla risposta segreta che mi dia errore ne caso di risposta sbagliata ho bisogno d'impostare nel provider la proprietà requiresQuestionAndAnswer = true.
E l'unico modo che sembre esistere per verificare la correttezza della risposta è utilizzare comunque il metodo resetpassword il quale poi mi resetta comunque la password!
Il punto è che a me non interessa resettare la password ma solo verficare la correttezza della risposta segreta!!! Potrei pensare di consentire il cambio randomico della password al metodo resetpassword per poi reimpostare la vecchia password con il metodo changepasword, ma a questo punto siamo d'accapo nel senso che avendo la proprietà requiresQuestionAndAnswer = true, il metodo changepassword continuerebbe a darmi l'errore di cui parlavavo sopra, ovvero richiedere in ingresso la passwordanswer laddove changepassword non ha overload che lo permettano. E' un serpente che si mangia la coda!

Possibile che il meccanismo di gestione dell'utenet di ASP.NET sia così vincolante? come escamotage stavo pensando alla possibilità di definire un provider di membership secondario nel web.config identico a quello di default ma con la proprietà requiresQuestionAndAnswer impostata a false, da caricare dinamicamente un attimo prima di utilizzare il metodo changepassword e dopo aver verificato l'esattezza della risposta, per poi ripristinare il provider di default dopo aver cambiato la password! Secondo te funzionerebbe? Ed inoltre, c'è un modo per caricare programmaticamentre e rendere attivo da codice un provider al posto di quello di default per poi ripristinarlo?

Grazie mille per ogni suggerimento!

Ciao!



Ciao!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
In primo piano

I più letti di oggi

Media
In evidenza
MISC