Hello everyone, I am going to share the code
sample with simple steps for forgot a password or reset the password using Asp.Net
MVC 5.
Following
steps of forgot the password as given below:-
1. The First
click on forgot links
2. Enter
valid emailId in the input text box
3. Validate
emailId, If email valid sent an email to given email with attached links
4. Click
on given email links, open a popup with new pwd and confirm pwd
5. Click
on reset pwd, If valid pwd then sent successfully msg on below popup box,
otherwise send error msg for an invalid attempt
Example
in detail step by step:-
Click on forgot a link and enter the email, if an input
email is a valid system will send you an email link to your given emailId.
Forgot
password HTTP post action method:-
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async
Task<ActionResult> ForgotPassword(ForgotViewModel model)
{
if
(ModelState.IsValid)
{
var
user = await UserManager.FindByNameAsync(model.UserName);
string
To = model.UserName, UserID, Password, SMTPPort, Host;
if
(user == null)
{
//If
user does not exist or is not confirmed.
return
View("ForgotPassword");
}
else
{
//Generate
password token
var
guid = Guid.NewGuid();
//Create
URL with an above token
var
lnkHref = "<a href='" + Url.Action("ResetPassword",
"Account", new
{ email = model.UserName, code = guid }, "http")
+ "'>Reset Password</a>";
//HTML
Template for Send email
string
subject = "Your changed password";
string
body = "<b>Please find the Password Reset Link.
</b><br/>" + lnkHref;
//Get
and set the app settings using configuration manager.
EmailManager.AppSettings(out
UserID, out Password, out SMTPPort, out Host);
//Call
send email methods.
EmailManager.SendEmail(UserID, subject, body, To, UserID, Password,
SMTPPort, Host);
}
}
return
View();
}
Email
Manager Class:-
public class EmailManager
{
public static void
AppSettings(out string UserID, out string Password, out string SMTPPort, out string Host)
{
UserID =
ConfigurationManager.AppSettings.Get("UserID");
Password =
ConfigurationManager.AppSettings.Get("Password");
SMTPPort =
ConfigurationManager.AppSettings.Get("SMTPPort");
Host =
ConfigurationManager.AppSettings.Get("Host");
}
public static void
SendEmail(string From, string Subject, string Body, string To, string UserID, string Password, string SMTPPort, string Host)
{
System.Net.Mail.MailMessage mail = new
System.Net.Mail.MailMessage();
mail.To.Add(To);
mail.From = new
MailAddress(From);
mail.Subject = Subject;
mail.Body = Body;
SmtpClient smtp = new
SmtpClient();
smtp.Host = Host;
smtp.Port = Convert.ToInt16(SMTPPort);
smtp.Credentials = new
NetworkCredential(UserID, Password);
smtp.EnableSsl = true;
smtp.Send(mail);
}
}
App
setting for the configuration manager:-
<appSettings>
<add key="ToEmail" value="anil@gmail.com"
/>
<add key="UserID" value="anil@gmail.com"
/>
<add key="Password" value="enterpassordhere"
/>
<add key="SMTPPort" value="587"
/>
<add key="Host" value="smtp.gmail.com"
/>
</appSettings>
After Click on the given email link, open a popup
with new pwd and confirm pwd. If the attempt is valid then sent successfully
msg on below popup box otherwise send error msg for an invalid attempt.
/// <summary>
/// this
method is used to handle the post events for ResetPassword.
/// </summary>
[HttpPost]
[AllowAnonymous]
public
ActionResult ResetPassword(ResetPwdViewModel model, string
email, string code)
{
if
(ModelState.IsValid)
{
AspNetUser user =
_repoAspDotNetUser.GetAspNetUser(email);
if
(user != null)
{
String hashedNewPassword =
userManager.PasswordHasher.HashPassword(model.Password);
bool
result = _repoAspDotNetUser.ResetPasswordByToken(email, code,
hashedNewPassword);
if
(result)
{
ModelState.AddModelError("",
"Please return to the login page and enjoy with new
password.");
}
}
else
{
ModelState.AddModelError("",
"It's not a valid, this attempt is already processed.");
}
}
return
View();
}