2013-01-10 28 views
13

Sto creando un'applicazione ASP.NET MVC 4. Io uso il provider Simple Membership per gestire l'autenticazione e l'autorizzazione all'interno del sistema. Quali sono i modi per cambiare la password in questo approccio. Ho trovato un metodo ChangePassword che accetta tre parametri, inclusa la password originale, per funzionare.cambia password in MVC 4

Esiste un altro modo per sostituire/modificare la password per l'utente senza conoscere effettivamente la password originale?

+0

Non stai cercando una funzione di reimpostazione della password? Se l'utente non conosce la password originale, come si sono registrati? E se non sono connessi, quale password dell'utente cambieranno? – ProfK

risposta

18

ChangePassword viene utilizzato quando un utente desidera modificare la propria password e la password corrente è la prova per consentire che ciò accada (si veda Cambia schermata password).

Penso che il modo più diretto per farlo è chiamare WebSecurity.GeneratePasswordResetToken() e passare il risultato in WebSecurity.ResetPassword, insieme alla nuova password.

var token = WebSecurity.GeneratePasswordResetToken("UserName"); 
    var result = WebSecurity.ResetPassword(token, "NewPassword"); 
+0

Molte grazie !!!! – Bartosz

4

C'è un articolo dettagliato su how to implement password reset/change with SimpleMembership in MVC 4 here. Include anche il codice sorgente che puoi scaricare.

Questo esempio utilizza la posta elettronica per inviare un URL all'utente per fare clic su per reimpostare la password. Questo è più sicuro del semplice fatto che l'utente inserisca la vecchia password e la nuova password direttamente sul sito Web perché è un'altra verifica dell'utente. Questo allevia lo scenario in cui qualcuno ottiene una sospensione della password dell'utente e la blocca cambiando la password. Ciò consente inoltre all'utente di reimpostare la password nel caso in cui abbia dimenticato la password.

Il codice per inviare l'e-mail con il collegamento sarebbe simile a questo.

[AllowAnonymous] 
[HttpPost] 
public ActionResult ResetPassword(ResetPasswordModel model) 
{ 
    string emailAddress = WebSecurity.GetEmail(model.UserName); 
    if (!string.IsNullOrEmpty(emailAddress)) 
    { 
     string confirmationToken = 
      WebSecurity.GeneratePasswordResetToken(model.UserName); 
     dynamic email = new Email("ChngPasswordEmail"); 
     email.To = emailAddress; 
     email.UserName = model.UserName; 
     email.ConfirmationToken = confirmationToken; 
     email.Send(); 

     return RedirectToAction("ResetPwStepTwo"); 
    } 

    return RedirectToAction("InvalidUserName"); 
} 

questo crea una e-mail che ha un collegamento a un API Web che accetta il token come l'id che viene passato. Quando si fa clic sul link che colpisce questo metodo.

[AllowAnonymous] 
public ActionResult ResetPasswordConfirmation(string Id) 
{ 
    ResetPasswordConfirmModel model = new ResetPasswordConfirmModel() { Token = Id }; 
    return View(model); 
} 

L'operazione ottiene il token dalla stringa di query e lo mette nel ResetPasswordConfirmationModel che viene passato alla vista, che permette all'utente di inserire la nuova password. La nuova password viene inserita due volte per assicurarsi che sia stata inserita correttamente, che è valida sulla pagina. Quando inviano queste informazioni vengono portati alla versione POST di questa azione che resetta effettivamente la password.

[AllowAnonymous] 
[HttpPost] 
public ActionResult ResetPasswordConfirmation(ResetPasswordConfirmModel model) 
{ 
    if (WebSecurity.ResetPassword(model.Token, model.NewPassword)) 
    { 
     return RedirectToAction("PasswordResetSuccess"); 
    } 
    return RedirectToAction("PasswordResetFailure"); 
} 
+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/10490453) – skrrgwasme

+1

@skrrgwasme - Buon punto. Ho aggiunto i dettagli rilevanti nella mia risposta aggiornata. –