Bom dia pessoal.
Consegui evoluir com o problema de token inválido. Tive que acrescentar o seguinte código:
[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task EsqueciSenha(EsqueciSenhaViewModel modelo) { if (!ModelState.IsValid) { return View(modelo); }
// UsuarioManager manager = HttpContext.GetOwinContext().GetUserManager<UsuarioManager>();
// var usuario = await manager.FindByEmailAsync(modelo.Email);
var provider = new DpapiDataProtectionProvider("ASP.NET Identity");
var userManager = HttpContext.GetOwinContext().GetUserManager<UsuarioManager>();
// var userManager = new UserManager<Usuario>(new UserStore<Usuario>());
userManager.UserTokenProvider = new DataProtectorTokenProvider<Usuario, string>(
provider.Create("Igs2.0"));
var usuario = await userManager.FindByEmailAsync(modelo.Email);
if (usuario == null || !(await userManager.IsEmailConfirmedAsync(usuario.Id)))
{
var token = await userManager.GeneratePasswordResetTokenAsync(usuario.Id);
var callbackUrl = Url.Action("ConfirmacaoEsqueciSenha", "Autenticacao", new { UsuarioId = usuario.Id, Token= token }, protocol: Request.Url.Scheme);
var enviarEmail = EmailEsqueciSenhaController.EnviarEmail(usuario, "Por favor redefina sua senha clicando aqui: <a href=\"" + callbackUrl + "\">Clique aqui para redefinir sua senha!</a>", "Alteração de senha");
return View("EmailEsqueciSenhaEnviado");
}
return View(modelo);
}
Desta forma consigo pegar um token válido e recebo um e-mail para confirmar o reset de senha. Neste e-mail tenho um link que ao clicar, sou redirecionada para o seguinte código:
[HttpPost] public async Task ConfirmacaoEsqueciSenha(ConfirmacaoEsqueciSenhaViewModel modelo) {
UsuarioManager manager = HttpContext.GetOwinContext().GetUserManager<UsuarioManager>();
//var usuario = await manager.FindByIdAsync(modelo.UsuarioId);
if (ModelState.IsValid)
{
var resultadoAlteracao =
await manager.ResetPasswordAsync(
modelo.UsuarioId,
modelo.Token,
modelo.NovaSenha);
if (resultadoAlteracao.Succeeded)
{
return RedirectToAction("Index", "Home");
}
AddErrors(resultadoAlteracao);
}
return View();
}
Na depuração na linha da variável “resultadoAlteracao” estou recebendo todos os dados do modelo(UsuarioId, Token e NovaSenha), sendo que quando passo desta linha ocorre o seguinte erro:
System.NotSupportedException: No IUserTokenProvider is registered.
Linha 343: // Verifica o ID do usuário Linha 344: // Mudar a senha Linha 345: var resultadoAlteracao = Linha 346: await manager.ResetPasswordAsync( Linha 347: modelo.UsuarioId,
Alguém poderia me ajudar?
Obrigada. Flávia Lares