2016-05-04 16 views
1

ForgetPasswordトークンをクリックすると、手動リセットパスワードを作成しようとしています。しかし、私はこのトークンをユーザーで検証すると、常にfalseを返します。 ここでこの で私を助けてください私のコードはResetPasswordのPasswordResetTokenを確認する

[AllowAnonymous] 
public async Task<ActionResult> ResetPassword() 
{ 
    var provider = new DpapiDataProtectionProvider("AppName"); 
    var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>()); 
    userManager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(provider.Create("EmailConfirmation")); 
    string userId = Request.QueryString["UserId"]; 
    string code = Request.QueryString["code"]; 
    var user = await UserManager.FindByIdAsync(userId); 
    //if (!(await UserManager.ConfirmEmailAsync(userId, code)).Succeeded) 
    ApplicationDbContext context = new ApplicationDbContext(); 
    UserStore<ApplicationUser> store = new UserStore<ApplicationUser>(context); 
    if (!await userManager.UserTokenProvider.ValidateAsync("EmailConfirmation", code, new UserManager<ApplicationUser>(store) , user)) 
    { 
     return RedirectToAction("Message", "Home", new { status = false, message = "Invalid token, please retry." }); 
    } 
    return View("ResetPassword", new ResetPasswordModel { UserId = userId, Token = code }); 
} 

である。また、これは私がPasswordResetToken

var provider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider("AppName"); 
UserManager.UserTokenProvider = new Microsoft.AspNet.Identity.Owin.DataProtectorTokenProvider<ApplicationUser>(provider.Create("EmailConfirmation")); 
var user = await UserManager.FindByNameAsync(model.Email); 
if (user == null)//|| !(await UserManager.IsEmailConfirmedAsync(user.Id))) 
{ 
    // Don't reveal that the user does not exist or is not confirmed 
    return Json(new { status = false, message = "User does not exist" }); 
} 
var code = await UserManager.GeneratePasswordResetTokenAsync(user.Id); 

を生成する方法のコードであるおそらく少し遅く、この

答えて

4

で私を助けて、私ください。最近同様の要件に遭遇しました。

私が見る唯一の問題は、 "PasswordReset" が使用されている間、 "EmailConfirmation" は、登録電子メールで使用されます

if (!await userManager.UserTokenProvider.ValidateAsync("ResetPassword", code, new UserManager<ApplicationUser>(store) , user)) 
{ 
    return RedirectToAction("Message", "Home", new { status = false, message = "Invalid token, please retry." }); 
} 

if (!await userManager.UserTokenProvider.ValidateAsync("EmailConfirmation", code, new UserManager<ApplicationUser>(store) , user)) 
{ 
    return RedirectToAction("Message", "Home", new { status = false, message = "Invalid token, please retry." }); 
} 

変更これですForgotPasswordのグッズ。