WebMatrix 코드에서이 두 기능에 도움이되는 기능과 스키마 세트가있는 것으로 보입니다. 그러나 컨트롤러 메소드 나 뷰가 없으므로 직접 구현해야합니다.패스워드 분실 + 이메일 ASP.NET 확인 MVC WebMatrix
어디에도이 코드를 앱에 복사 할 수있는 샘플이 있습니까? 나는 뭔가를 찾고 있어요 :
- 하는 비밀번호 분실 이메일
- 가 다시 보내기 확인 이메일보기 + 컨트롤러 방법은
WebMatrix 코드에서이 두 기능에 도움이되는 기능과 스키마 세트가있는 것으로 보입니다. 그러나 컨트롤러 메소드 나 뷰가 없으므로 직접 구현해야합니다.패스워드 분실 + 이메일 ASP.NET 확인 MVC WebMatrix
어디에도이 코드를 앱에 복사 할 수있는 샘플이 있습니까? 나는 뭔가를 찾고 있어요 :
잊으 셨나요
다른 날에 "비밀번호 분실"을 만들려고했습니다. 기능 "asp.net에서 MVC 4. 나는 봤어요 및 밖으로 있지만 최고의 솔루션을 얻을 수 없습니다. 나는 마침내 탈출구를 발견했다. 15 간단한 단계
1 부 비밀번호
1 단계 •이 MVC 4 C# 인터넷 응용 프로그램 템플릿 : (계정 및 홈 자동으로 생성됩니다 컨트롤러) • 빌드 및 실행을 만들고 이메일을 통해 정보를 다시 보내기 귀하의 프로젝트. 등록하고 로그인하십시오. 아차 •
Everything working fine?
2 단계 에게 (간단한 회원 테이블이 생성됩니다)! 등록 중에는 이메일 주소를 묻지 않습니다! 사용자에게 비밀번호 토큰을 보내려면 이메일 ID가 필요합니다 !! 이제 데이터베이스에서 몇 가지 변경 사항을 서버 탐색기로 이동해 봅시다! (u를 찾을 수없는 경우 Ctrl + Alt + S를 누를 수 있음) • "데이터 연결"을 확장하면 u가 두 개의 테이블을 보게됩니다. 사용자 프로필 테이블을 엽니 다. 에는 다음과 같은 열이 추가
3 단계 을 이제 솔루션 탐색기로 이동 • ... 모델 ... 계정 모델을. .. 이제 솔루션 탐색기 ...보기 ... A를 이동 • 4 단계
//new properties
[Required]
[Display(Name="Email ID")]
public string EmailId { get; set; }
[Required]
[Display(Name = "About Yourself")]
public string Details { get; set; }
이메일 아이디 및 세부
이러한 두 가지 속성을 추가 • 모델 등록 ccount보기 ... Register.cshtml보기 • 사용자가 전자 메일 아이디 및 기타 세부 정보를 입력 할 수 있도록이 두 속성을 추가합니다.단계 ... 컨트롤러 ... 계정 컨트롤러 ...등록 컨트롤러 동작 방법 게시 버전 • 사용자가 전자 메일 아이디 및 기타 세부 정보를 입력 할 수 있도록 이러한 등록 정보를 추가합니다. 변경 내용이 강조 표시됩니다.
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { EmailId = model.EmailId, Details = model.Details});
WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("Index", "Home");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
다시 프로젝트를 빌드하고 실행하지 않는 이유는 무엇입니까? 등록하고 세부 정보를 입력하십시오. 이제 이메일 주소를 지정하라는 메시지가 나타납니다. 사용자가 이메일 ID 및 기타 세부 정보를 입력 할 수 있도록하기 위해이 등록 정보를 추가하십시오.
서버 탐색기로 이동하여 사용자 프로필 테이블을 마우스 오른쪽 단추로 클릭 한 다음 "테이블 데이터 표시"를 선택하면 확인을 위해 입력 한 세부 정보를 볼 수 있습니다. 이제 •
6 단계 는 GET 컨트롤러 액션 •
[AllowAnonymous]
public ActionResult ForgotPassword()
{
return View();
}
• (POST)
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult ForgotPassword(string UserName)
{
//check user existance
var user = Membership.GetUser(UserName);
if (user == null)
{
TempData["Message"] = "User Not exist.";
}
else
{
//generate password token
var token = WebSecurity.GeneratePasswordResetToken(UserName);
//create url with above token
var resetLink = "<a href='" + Url.Action("ResetPassword", "Account", new { un = UserName, rt = token }, "http") + "'>Reset Password</a>";
//get user emailid
UsersContext db = new UsersContext();
var emailid = (from i in db.UserProfiles
where i.UserName == UserName
select i.EmailId).FirstOrDefault();
//send mail
string subject = "Password Reset Token";
string body = "<b>Please find the Password Reset Token</b><br/>" + resetLink; //edit it
try
{
SendEMail(emailid, subject, body);
TempData["Message"] = "Mail Sent.";
}
catch (Exception ex)
{
TempData["Message"] = "Error occured while sending email." + ex.Message;
}
//only for testing
TempData["Message"] = resetLink;
}
return View();
}
단지 뷰를 돌려줍니다 (GET) 컨트롤러 계정 다음과 같은 컨트롤러 액션 메소드를 만들 수있는 이동 암호 재설정 기능을 구현할 수 있습니다. • POST 컨트롤러 동작 : 사용자 이름 수신 해당 존재 여부 확인 암호 재설정 토큰 생성 전자 메일로 보낼 URL을 작성합니다.
7 단계 비밀번호 분실 액션 메소드에 오른쪽 클릭 • 사용자에 입력 할 수있는 텍스트 상자가 표시됩니다 뷰 페이지 • 아래
@{
ViewBag.Title = "Forgot Password";
}
<h2>Forgot Password</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<fieldset>
<legend>Forgot Password Form</legend>
<ol>
<li>
@Html.Label("User Name", new { @for = "UserName" })
@Html.TextBox("UserName")
<span style="color:red;">@TempData["Message"]</span>
</li>
</ol>
<input type="submit" value="Recover" />
</fieldset>
}
될 것 뷰 페이지의 코드 보기를 추가 사용자 이름
8 단계 • 솔루션 탐색기로 이동 ... 모델 ... 계정 모델 ... 사용자 프로필보기 모델. 변경 ... 이제 솔루션 탐색기로 이동 •
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
//new properties
public string EmailId { get; set; }
public string Details { get; set; }
}
9 단계 강조되어보기 ... 계정 ... 로그인보기. 이제 암호를 잊어 버린 경우를 대비하여 암호를 복구 할 수있는 옵션이 나타납니다.
<ul>
<li>
@Html.ActionLink("Register", "Register") if you don't have an account.
</li>
<li>
@Html.ActionLink("Forgot Password", "ForgotPassword") if you want to recover your password.
</li>
</ul>
2 부 비밀번호 URL에서 정보를 다시 받기
1 가 • 솔루션 탐색기 ... 컨트롤러 ... 계정 컨트롤러 ... 로 이동 단계이 방법은 • 새로운 암호 재설정 작업 방법 만들기 URL에서 'un'(사용자 이름) 및 'rt'(비밀번호 재설정 토큰)를 수락합니다. 비밀번호 재설정 액션 메소드에 오른쪽 클릭 •
[AllowAnonymous]
public ActionResult ResetPassword(string un, string rt)
{
UsersContext db = new UsersContext();
//TODO: Check the un and rt matching and then perform following
//get userid of received username
var userid = (from i in db.UserProfiles
where i.UserName == un
select i.UserId).FirstOrDefault();
//check userid and token matches
bool any = (from j in db.webpages_Memberships
where (j.UserId == userid)
&& (j.PasswordVerificationToken == rt)
//&& (j.PasswordVerificationTokenExpirationDate < DateTime.Now)
select j).Any();
if (any == true)
{
//generate random password
string newpassword = GenerateRandomPassword(6);
//reset password
bool response = WebSecurity.ResetPassword(rt, newpassword);
if (response == true)
{
//get user emailid to send password
var emailid = (from i in db.UserProfiles
where i.UserName == un
select i.EmailId).FirstOrDefault();
//send email
string subject = "New Password";
string body = "<b>Please find the New Password</b><br/>" + newpassword; //edit it
try
{
SendEMail(emailid, subject, body);
TempData["Message"] = "Mail Sent.";
}
catch (Exception ex)
{
TempData["Message"] = "Error occured while sending email." + ex.Message;
}
//display message
TempData["Message"] = "Success! Check email we sent. Your New Password Is " + newpassword;
}
else
{
TempData["Message"] = "Hey, avoid random request on this page.";
}
}
else
{
TempData["Message"] = "Username and token not maching.";
}
return View();
}
2 단계 • 솔루션 탐색기로 이동과 같은 단계
@{
ViewBag.Title = "ResetPassword";
}
<h2>Password Mailed :) </h2>
아래에있을 것 뷰 페이지의 코드 보기를 추가 .. . 모델 ... 계정 모델 ... 다음과 같이 변경하십시오. • 우리는 UserProfile DB Model의 인스턴스를 만들고 db.webpages_Memberships '를 DbSet으로 구현합니다.'webpages_Memberships '를 모델로 사용합니다.
public class UsersContext : DbContext
{
public UsersContext()
: base("DefaultConnection")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
public DbSet<webpages_Membership> webpages_Memberships { get; set; }
}
[Table("webpages_Membership")]
public class webpages_Membership
{
[Key]
public int UserId { get; set; }
public DateTime CreateDate { get; set; }
public string ConfirmationToken { get; set; }
public bool IsConfirmed { get; set; }
public DateTime LastPasswordFailureDate { get; set; }
public int PasswordFailuresSinceLastSuccess { get; set; }
public string Password { get; set; }
public DateTime PasswordChangeDate { get; set; }
public string PasswordSalt { get; set; }
public string PasswordVerificationToken { get; set; }
public DateTime PasswordVerificationTokenExpirationDate { get; set; }
}
4 단계 • 사용자에 대한 임의의 암호를 생성합니다 불리는이 방법 • 계정 컨트롤러 에 임의의 암호 생성 기능을 추가
private string GenerateRandomPassword(int length)
{
string allowedChars = "[email protected]$?_-*&#+";
char[] chars = new char[length];
Random rd = new Random();
for (int i = 0; i < length; i++)
{
chars[i] = allowedChars[rd.Next(0, allowedChars.Length)];
}
return new string(chars);
}
5 단계 • 전자 메일 보내기 추가 계정 컨트롤러의 기능. •이 기능은 사용자가 암호를 분실했을 때 복구 단추를 클릭 할 때 사용자에게 첫 번째 메일을 보냅니다. 첫 번째 메일에는 재설정 된 비밀번호 링크가 있습니다. 사용자가 링크를 클릭하면 사용자가 비밀번호 재설정 페이지로 리디렉션됩니다. 다시 새 암호가 사용자에게 우편으로 발송됩니다. • [email protected] 대신 전자 메일 주소를 입력하고 암호를 작성해야합니다.
private void SendEMail(string emailid, string subject, string body)
{
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
client.EnableSsl = true;
client.Host = "smtp.gmail.com";
client.Port = 587;
System.Net.NetworkCredential credentials = new System.Net.NetworkCredential("[email protected]", "password");
client.UseDefaultCredentials = false;
client.Credentials = credentials;
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.From = new MailAddress("[email protected]");
msg.To.Add(new MailAddress(emailid));
msg.Subject = subject;
msg.IsBodyHtml = true;
msg.Body = body;
client.Send(msg);
}
+1 대답의 전단 길이. –