2015-09-01 7 views
0

Не могли бы вы рассказать мне, что не так в следующем коде? Он меняет пароль на новый, сохраняет его успешно в БД, отправляет сообщение пользователю, но когда я пытаюсь войти в систему с новым паролем, я получаю сообщение об ошибке:Сбросить пароль и отправить электронное письмо

Invalid username or password

protected void SendEmail(object sender, EventArgs e) 
    { 
     string username = string.Empty; 
     string password = string.Empty; 
     string newPassword = "temp_" + DateTime.Now.ToString("yyyyMMddHHmmss"); 

     var manager = new UserManager(); 
     string newPasswordHash = manager.PasswordHasher.HashPassword("newPassword"); 
     string constr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(constr)) 
     { 
      using (SqlCommand cmd = new SqlCommand("SELECT Username, [PasswordHash] FROM AspNetUsers WHERE Email = @Email")) 
      { 
       cmd.Parameters.AddWithValue("@Email", txtEmail.Text.Trim()); 
       cmd.Connection = con; 
       con.Open(); 
       using (SqlDataReader sdr = cmd.ExecuteReader()) 
       { 
        if (sdr.Read()) 
        { 
         username = sdr["Username"].ToString(); 
         password = sdr["PasswordHash"].ToString(); 
        } 
       } 
       con.Close(); 
      } 

      using (SqlCommand cmd = new SqlCommand("Update AspNetUsers set [email protected] WHERE [email protected]")) 
      { 

       cmd.Parameters.AddWithValue("@Password", newPasswordHash); 


      } 

     } 
     if (!string.IsNullOrEmpty(password)) 
     { 
      MailMessage mm = new MailMessage("****@gmail.com", txtEmail.Text.Trim()); 
      mm.Subject = "Password Recovery"; 
      mm.Body = string.Format("Your temporary password is {0}<br /><br /> You are advised to login and change it immediately.<br /><br />Thank You.", newPassword); 
      mm.IsBodyHtml = true; 
      SmtpClient smtp = new SmtpClient(); 
      smtp.Host = "smtp.gmail.com"; 
      smtp.EnableSsl = true; 
      NetworkCredential NetworkCred = new NetworkCredential(); 
      NetworkCred.UserName = "*****@gmail.com"; 
      NetworkCred.Password = "*****"; 
      smtp.UseDefaultCredentials = true; 
      smtp.Credentials = NetworkCred; 
      smtp.Port = 587; 
      smtp.Send(mm); 
      lblMessage.ForeColor = Color.Green; 
      lblMessage.Text = "A temporary password has been sent to your email address."; 
     } 
     else 
     { 
      lblMessage.ForeColor = Color.Red; 
      lblMessage.Text = "This email address does not match our records."; 
     } 
} 

логин. aspx.cs public partial class Account_Login: Страница { protected void Page_Load (отправитель объекта, EventArgs e) { RegisterHyperLink.NavigateUrl = "Регистрация"; //OpenAuthLogin.ReturnUrl = Request.QueryString ["ReturnUrl"]; var returnUrl = HttpUtility.UrlEncode (Request.QueryString ["ReturnUrl"]); if (! String.IsNullOrEmpty (returnUrl)) { RegisterHyperLink.NavigateUrl + = "? ReturnUrl =" + returnUrl; }}

protected void LogIn(object sender, EventArgs e) 
    { 
     if (IsValid) 
     { 
      // Validate the user password 
      var manager = new UserManager(); 
      ApplicationUser user = manager.Find(UserName.Text, Password.Text); 
      if (user != null) 
      { 
       IdentityHelper.SignIn(manager, user, RememberMe.Checked); 
       IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response); 
      } 
      else 
      { 
       FailureText.Text = "Invalid username or password."; 
       ErrorMessage.Visible = true; 
      } 
     } 
    } 

}

+0

где вы выполняете ** команду обновления **? – shreesha

ответ

1

Проблема вы не обновляя вашу password.Below линию не обновит password.it просто добавить параметр для сбора параметров.

using (SqlCommand cmd = new SqlCommand("Update AspNetUsers set [email protected] WHERE [email protected]")) 
      { 
       cmd.Parameters.AddWithValue("@Password", newPasswordHash); 
      } 

использовать код ниже

using (SqlConnection con = new SqlConnection(constr)) 
      { 
       using (SqlCommand cmd = new SqlCommand("Update AspNetUsers set [email protected] WHERE [email protected]")) 
       { 
        cmd.Parameters.AddWithValue("@Email", txtEmail.Text.Trim()); 
        cmd.Parameters.AddWithValue("@Password", newPasswordHash); 
        cmd.Connection = con; 
        con.Open(); 
        int row=cmd.ExecuteNonQuery(); 
        if(row==1) 
         { 
         //success 
         } 
        else 
        { 
         //failed 
        } 
       } 
      } 
+0

Я все равно получаю ту же ошибку! – Wael

+0

проверить таблицу, если пароль обновляется или нет – shreesha

+0

Да, он обновляется и хешируется. – Wael

Смежные вопросы