1
resposta

Exceção TraceRecord

Boa tarde pessoal.

Estou com um erro no código que fiz para o link Esqueci minha senha. Se alguém puder me ajudar. Veja:


[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] 
public async Task EsqueciSenha(EsqueciSenhaViewModel modelo) { if (!ModelState.IsValid) { return View(modelo); }
    var provider = IdentityConfig.DataProtectionProvider;

             UserManager.UserTokenProvider = new DataProtectorTokenProvider<Usuario>(provider.Create("UserToken"));

                var usuario = await UserManager.FindByEmailAsync(modelo.Email);

    if (usuario == null || !(await UserManager.IsEmailConfirmedAsync(usuario.Id)))
    {
       return View("ConfirmacaoEsqueciSenha");
    }

    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 + "\">Redefinir sua senha!</a>", "Alteração de senha");
    return View("EmailEsqueciSenhaEnviado");
}

No código acima está tudo ok, recebo o usuario e o token na URL e recebo um e-mail com link para confirmar a alteração, ao clicar neste link sou redirecionada para o código abaixo:


[HttpPost] public async Task ConfirmacaoEsqueciSenha(ConfirmacaoEsqueciSenhaViewModel modelo) { if (ModelState.IsValid) { // Verifica o Token recebido // Verifica o ID do usuário // Mudar a senha var resultadoAlteracao = await UserManager.ResetPasswordAsync( modelo.UsuarioId, modelo.Token, modelo.NovaSenha);`

            var provider = IdentityConfig.DataProtectionProvider;

             UserManager.UserTokenProvider = new 
         DataProtectorTokenProvider<Usuario>(provider.Create("UserToken"));

    if (resultadoAlteracao.Succeeded)
    {
        return RedirectToAction("Index", "Home");
    }
        AddErrors(resultadoAlteracao);
    }
 return View();
}

Na classe IdentityConfig:


   public static IDataProtectionProvider DataProtectionProvider { get; set; }

public void Configuration(IAppBuilder app)
        {
                 DataProtectionProvider = app.GetDataProtectionProvider();


}

E no create do UsuarioManager:


  public static UsuarioManager Create()
        {
            var userStore = new UserStore<Usuario>(new IgsContext());

            var manager = new UsuarioManager(new UserStore<Usuario>());
            // Configure validation logic for passwords
            manager.PasswordValidator = new PasswordValidator
            {
                RequiredLength = 6,
                RequireNonLetterOrDigit = false,
                RequireDigit = false,
                RequireLowercase = false,
                RequireUppercase = false,
            };

            var dataProtectionProvider = new Microsoft.Owin.Security.DataProtection.DpapiDataProtectionProvider("Teste");

            if (dataProtectionProvider != null)
            {
                manager.UserTokenProvider = new DataProtectorTokenProvider<Usuario>(dataProtectionProvider.Create("UserToken"));
            }

            return new UsuarioManager(userStore);

        }

Quando executo o Visual Studio para em um ponto e ocorre a exceção:

"iisexpress.exe" (CLR v4.0.30319: /LM/W3SVC/2/ROOT-1-132030214269111696): Carregado "C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Transactions.resources\v4.0_4.0.0.0_pt-BR_b77a5c561934e089\System.Transactions.resources.dll". O módulo foi criado sem símbolos.
System.Transactions Critical: 0 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Critical"><TraceIdentifier>http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled</TraceIdentifier><Description>Exceção não tratada</Description><AppDomain>/LM/W3SVC/2/ROOT-1-132030214269111696</AppDomain><Exception><ExceptionType>System.NullReferenceException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>Referência de objeto não definida para uma instância de um objeto.</Message><StackTrace>  

Ele pára de executar após o envio de e-mails. Sendo que recebo o e-mail da alteração de senha. Se alguém puder me ajudar.

Obrigada. Flávia

1 resposta

Respondido em outro post: https://cursos.alura.com.br/forum/topico-erro-iusertokenprovider-83706