0

en utilisant l'identité asp.net et ont le code partiel suivant dans mon compte/méthode Register:Problème avec l'identité Asp.net Email Confirmation Token: Je suis « non valide Token »

string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); 

string codeHtmlVersion = HttpUtility.UrlEncode(code); 

var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = codeHtmlVersion }, protocol: Request.Url.Scheme); 

j'envoyer alors le callbackUrl à l'utilisateur dans un email. Quand je déboguer le code, je vois les valeurs suivantes:

code: "GE2HDQSSjAboLqEBdBv5rTjyksC09o110uqa4Dh + 02TK4R + lhwgfjEaFiZkOc9GfQBKKryTTIgeITlgDgtvnDtVvk6SJyAjw7iuSPdNe + 9tfUhcReAn50YqZp0aYbHy2QyHLc7EAUSyd/SJpCHdlgRsaAdOqpBPlI4zcd3FlbuMxiRdjHJq3q2K12YdQWcCF"

codeHtmlVersion: "GE2HDQSSjAboLqEBdBv5rTjyksC09o110uqa4Dh% 2b02TK4R% 2blhwgfjEaFiZkOc9GfQBKKryTTIgeITlgDgtvnDtVvk6SJyAjw7iuSPdNe% 2b9tfUhcReAn50YqZp0aYbHy2QyHLc7EAUSyd% 2fSJpCHdlgRsaAdOqpBPlI4zcd3FlbuMxiRdjHJq3q2K12YdQWcCF"

Ensuite, dans ma méthode ConfirmEmail, j'inverse les valeurs (ou alors j'ai l'intention de le faire):

public async Task<ActionResult> ConfirmEmail(string userId, string code) 
{ 
    string codeHtmlVersion = HttpUtility.UrlEncode(code); 

    var result = await UserManager.ConfirmEmailAsync(userId, codeHtmlVersion); 
    .... 
} 

Lorsque l'utilisateur clique sur le lien de confirmation de son e-mail, dans ma session de débogage, je vois les valeurs suivantes:

code: "GE2HDQSSjAboLqEBdBv5rTjyksC09o110uqa4Dh% 2b02TK4R% 2blhwgfjEaFiZkOc9GfQBKKryTTIgeITlgDgtvnDtVvk6SJyAjw7iuSPdNe% 2b9tfUhcReAn50YqZp0aYbHy2QyHLc7EAUSyd% 2fSJpCHdlgRsaAdOqpBPlI4zcd3FlbuMxiRdjHJq3q2K12YdQWcCF"

codeHtmlVersion: "GE2HDQSSjAboLqEBdBv5rTjyksC09o110uqa4Dh% 252b02TK4R% 252blhwgfjEaFiZkOc9GfQBKKryTTIgeITlgDgtvnDtVvk6SJyAjw7iuSPdNe% 252b9tfUhcReAn50YqZp0aYbHy2QyHLc7EAUSyd% 252fSJpCHdlgRsaAdOqpBPlI4zcd3FlbuMxiRdjHJq3q2K12YdQWcCF"

Donc, comme il peut être vu mon code est en train de changer en quelque sorte et donc l'utilisateur reçoit le message d'erreur "Invalid Token". Quelqu'un peut-il m'aider à comprendre ce que je fais mal ici? Très appréciée.

Répondre

2

Vous encodez une deuxième fois lorsque vous voulez être le décodage dans ConfirmEmail

string codeHtmlVersion = HttpUtility.UrlDecode(code);

Analyser comment votre jeton se change:

  1. + devient %2b après le codage pour la première fois
  2. %2b devient %252b après l'encodage la deuxième fois (il code le % symbole à% 25)
+0

Merci beaucoup. Erreur stupide mais vous m'avez sauvé beaucoup de maux de tête! –