身份密码重置令牌无效
我书面方式MVC 5和使用Identity 2.0。
I'm writting MVC 5 and using Identity 2.0.
现在我米试图重设密码。但我总是得到无效令牌错误重置密码令牌。
Now I m trying to reset password. But i always getting "invalid token" error for reset password token.
public class AccountController : Controller
{
public UserManager<ApplicationUser> UserManager { get; private set; }
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
{
}
和我设置DataProtectorTokenProvider,
and i set DataProtectorTokenProvider,
public AccountController(UserManager<ApplicationUser> userManager)
{
//usermanager config
userManager.PasswordValidator = new PasswordValidator { RequiredLength = 5 };
userManager.EmailService = new IddaaWebSite.Controllers.MemberShip.MemberShipComponents.EmailService();
var provider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider();
userManager.UserTokenProvider = new Microsoft.AspNet.Identity.Owin.DataProtectorTokenProvider<ApplicationUser>(provider.Create("UserToken"))
as IUserTokenProvider<ApplicationUser, string>;
UserManager = userManager;
}
我生成密码重置发送邮件之前
i generate password reset before sending mail
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> ManagePassword(ManageUserViewModel model)
{
if (Request.Form["email"] != null)
{
var email = Request.Form["email"].ToString();
var user = UserManager.FindByEmail(email);
var token = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
//mail send
}
}
我点击链接的邮件和我越来越passwordreset令牌,使用
i click link in mail and i'm getting passwordreset token and using
var result = await UserManager.ResetPasswordAsync(model.UserId, model.PasswordToken, model.NewPassword);
结果总是假的,它说:无效令牌。 我应该在哪里解决?
the result always false and it says "Invalid Token". Where should i fix ?
UserManager.GeneratePasswordResetTokenAsync()经常会返回一个包含+字符的字符串。如果通过查询字符串传递参数,这是原因('+'字符是在URL查询字符串有一个空格)。
UserManager.GeneratePasswordResetTokenAsync() very often returns string that contains '+' characters. If you pass parameters by query string, this is the cause ('+' character is a space in query string in URL).
尝试在model.PasswordToken与'+'字符替换空格字符。
Try to replace space characters in model.PasswordToken with '+' characters.