2013-06-10 2 views
-1

ASP.NET MVC4에서 잊어 버린 암호 기능을 구현하고 있지만 사용자가 암호를 재설정하도록 허용 할 수 없습니다.ASP.NET MVC4의 암호 기능을 잊어 버렸습니다.

내 MVC 응용 프로그램은 암호를 잊어 버린 사용자의 로그인 페이지에 RECOVER 암호 링크를 표시합니다. 응용 프로그램의 첫 번째 부분은 잘 작동하고 메일은 사용자에게 전송되지만 나중에 사용자가 자신의 암호를 변경하려면 작동하지 않습니다.

이 내 비밀번호 찾기 컨트롤러 액션 방법 :

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

[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public ActionResult ForgotPassword(string UserName) 
{ 
    //Check user existence 
    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; 
     } 

    } 

    return View(); 
} 

이 내 암호보기 잊었입니다 :

@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> 
} 

비밀번호 분실보기 페이지는 사용자가 자신의 사용자 이름을 입력 할 수 있습니다. 사용자 이름과 이메일 ID를 받고 URL을 작성하고 사용자에게 메일을 보냅니다. 이 부분은 성공적으로 실행됩니다. 이제 사용자가 내 비밀번호 재설정 페이지로 리디렉션됩니다. 여기에서 사용자가 새 암호를 입력하고 데이터베이스를 업데이트 할 수있게하려고합니다. 리셋 컨트롤러 동작 및보기 페이지는 어떻게해야합니까?

가 난 다음 컨트롤러 액션 사용하여 이전 암호를 표시 할 수 있습니다 : (? 내가 잘못 건가) 을

[AllowAnonymous] 
public ActionResult ResetPassword(string un, string rt) 
{ 
    UsersContext db = new UsersContext(); 

    //Get userid of received username 
    var userid = (from i in db.UserProfiles 
        where i.UserName == un 
        select i.UserId).FirstOrDefault(); 


    var yrpassword = (from k in db.webpages_Memberships 
         where k.UserId == userid 
         select k.Password); 

    TempData["Message"] = "This is your user name" + un; 
    TempData["Message"] = "This is your user-id" + userid; 
    TempData["Message"] = "This is your user password" + yrpassword; 

    return View(); 
} 

이 암호 재설정 컨트롤러 액션의 현재보기 페이지입니다 :

@model MvcApplication1.Models.webpages_Membership 

@{ 
    ViewBag.Title = "Reset Password"; 
} 

<hgroup class="title"> 
    <h1>@ViewBag.Title.</h1> 
</hgroup> 

<section id="loginForm"> 

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend>Password Reset Form</legend> 
     <ol> 
      <li> 
       @Html.LabelFor(m => m.Password) 
       @Html.TextBoxFor(m => m.Password) 
       @Html.ValidationMessageFor(m => m.Password) 
      </li>       
     </ol> 
     <input type="submit" value="Save" /> 
    </fieldset>   
     <ol> 
      <li> 
       @Html.ActionLink("Login", "Login") You can now login to your account. 
      </li> 
     </ol> 
} 
</section> 

업데이트 쿼리가 필요하다는 것을 알고 있지만 어떻게 든 얻을 수는 없습니다.

답변

0

beginform 메소드의 메소드와 컨트롤러 이름을 지정하여 메소드를 실행하십시오. 이것을하십시오 :

+0

이것은 작동하지 않았다 : ( –

관련 문제