2015-06-05 28 views
5

Ho creato l'applicazione MVC 4. In quell'applicazione Se l'utente ha dimenticato la password, ho il metodo per inviare una e-mail all'utente per reimpostare la password. Sto usando l'appartenenza Identity asp.netErrore durante la reimpostazione della password

Ricevo il seguente messaggio di errore quando distribuisco questo progetto nel server web. Funziona perfettamente nella mia modalità localhost.

messaggio di errore

Impossibile modificare questo Utente L'operazione di protezione dei dati ha avuto successo. Questo potrebbe essere stato causato dal fatto che il profilo utente non è stato caricato per il contesto utente corrente del thread, cosa che potrebbe verificarsi quando il thread si sta sostituendo.!

questo è il metodo password dimenticata

[AllowAnonymous] 
    public ActionResult ForgotPassword() 
    { 
     return View(); 
    }    

    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> ForgotPassword(ForgotPasswordViewModel model) 
    { 

     if (model.UserName == null) 
     { 
      ModelState.AddModelError("", "Please enter the Username"); 
     } 

     if (model.Email == null) 
     { 
      ModelState.AddModelError("", "Please enter the Email ID"); 
     } 

     if (model.Email == null & model.UserName == null) 
     { 
      ModelState.AddModelError("", "Please enter the Username and Email ID"); 
     } 

     if(ModelState.IsValid) 
     { 
      var username = await UserManager.FindByNameAsync(model.UserName); 
      var user = await UserManager.FindByEmailAsync(model.Email); 



      if (user != null && username != null) 
      { 
       ApplicationDbContext context = new ApplicationDbContext(); 
       UserStore<ApplicationUser> store = new UserStore<ApplicationUser>(context); 


       var provider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider("MyProject"); 
       UserManager.UserTokenProvider = new Microsoft.AspNet.Identity.Owin.DataProtectorTokenProvider<ApplicationUser>(provider.Create("EmailConfirmation")); 
       var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); 

       System.Net.Mail.MailMessage m = new System.Net.Mail.MailMessage(
       new System.Net.Mail.MailAddress("[email protected]", "My Application"), 
       new System.Net.Mail.MailAddress(user.Email)); 
       m.Subject = "Reset your Password"; 
       m.IsBodyHtml = true; 

       m.Body = string.Format("<img src=\"@@[email protected]@\" alt=\"\"><BR/><BR/>Hi {0},<BR/><BR/>Please click the below link to reset your password. <BR/><BR/> <a href=\"{1}\" title=\"Reset Password\">Reset Password</a>", user.UserName, Url.Action("ResetPassword", "Account", new { UserId = user.Id, code = code }, Request.Url.Scheme)) + string.Format("<BR/><BR/>Regards,<BR/>We Are <BR/>"); 



       string attachmentPath = Server.MapPath("~/Images/hec-logo.png"); 

       string contentID = Path.GetFileName(attachmentPath).Replace(".", "") + "@zofm"; 

       Attachment inline = new Attachment(attachmentPath); 
       inline.ContentDisposition.Inline = true; 
       inline.ContentDisposition.DispositionType = DispositionTypeNames.Inline; 
       inline.ContentId = contentID; 
       inline.ContentType.MediaType = "image/png"; 
       inline.ContentType.Name = Path.GetFileName(attachmentPath); 
       m.Attachments.Add(inline); 

       // replace the tag with the correct content ID 
       m.Body = m.Body.Replace("@@[email protected]@", "cid:" + contentID); 

       System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("11.11.11.111"); 
       smtp.Port = 11; 
       smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "8888888"); 
       smtp.EnableSsl = false; 
       smtp.Send(m); 

       // Don't reveal that the user does not exist or is not confirmed 

      } 



      return View("ForgotPasswordConfirmation"); 
     } 


     else 
     { 
      ModelState.AddModelError("", "The Username or Email ID is invalid."); 
     } 
     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 
+0

mi chiedo è lo stesso problema come [questo] (http://stackoverflow.com/questions/23455579/generating-reset-password-token-does-not-work -in-azzurro-sito)? L'Havent 'è contrassegnato il più possibile come duplicato poiché non lo so per certo :) –

risposta

8

avevo lo stesso problema, poi, dopo molte ricerche ho scoperto che il problema è nella distribuzione IIS

quindi seguendo questo filo io in grado di risolvere il mio problema

The data protection operation was unsuccessful. This may have been caused by not having the user profile loaded for the current thread’s user context, which may be the case when the thread is impersonating.

  • Aprire il Gestione IIS

  • Scopri cosa AppPool l'applicazione utilizza selezionando la tua App, fare clic destro su di esso e selezionare Gestisci applicazioni -> Avanzate
    Impostazioni.

enter image description here

  • Dopo di che, in alto a sinistra, selezionare Applicazioni Piscine, e andare avanti e selezionare il pool di applicazioni utilizzato dal vostro app.

  • pulsante destro del mouse su di esso e selezionare Impostazioni avanzate, Vai alla sezione Modello di processo e trovare l'opzione “Carica profilo utente” e impostarlo su
    vero.

enter image description here

+0

c'è qualche rischio di impostare "Carica profilo utente" = vero? – Mahdi

Problemi correlati