token dell’id quadro di id quadro aspnet sull’e-mail di conferma

Sto cercando di confermare un account ma sto ricevendo un “token non valido”. errore.

Ecco cosa sto cercando:

var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); var callbackUrl = Url.Action("ConfirmacaoEmail", "Usuario", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); await UserManager.SendEmailAsync(user.Id, "Ativação de Conta", user.GetEmailAtivacao(model.Nome, callbackUrl)); 

se chiamo UserManager.ConfirmEmailAsync dopo questo codice, posso confermare l’account. Tuttavia, se apro il collegamento all’interno della variabile callbackUrl e provo a confermare attraverso quell’azione, ricevo l’errore.

Ho pensato che potesse essere qualcosa con OwinContext, quindi ho deciso di chiamare HttpContext.GetOwinContext().GetUserManager ma sto ricevendo lo stesso errore.

Qualche indizio?

Molto probabilmente il codice in transito viene modificato dal browser. Prova a fare UrlEncode sul token:

 var code = await userManager.GenerateEmailConfirmationTokenAsync(userId); code = System.Web.HttpUtility.UrlEncode(code); 

Altrimenti il ​​browser disturba con i simboli speciali che possono essere presenti nel token.

Ho avuto lo stesso problema. Ho risolto il problema con il seguente codice.

Campione:

 var emailToken = _customManager.GenerateEmailConfirmationToken(userId); emailToken = emailToken.Base64ForUrlEncode(); 

Metodi di estensione => Spazio nome: System.Text, System.Web

 public static class UrlEncoding { public static string Base64ForUrlEncode(this string str) { byte[] encbuff = Encoding.UTF8.GetBytes(str); return HttpServerUtility.UrlTokenEncode(encbuff); } public static string Base64ForUrlDecode(this string str) { byte[] decbuff = HttpServerUtility.UrlTokenDecode(str); return Encoding.UTF8.GetString(decbuff); } } 

La soluzione di Serdar era la chiave per la soluzione per gli spazi vuoti e + simbols usando Angular come applicazione web client.

Ma a volte ricevevo casuali messaggi di errore “token non validi”. Dopo alcune query al database dell’utente, ho scoperto che quegli errori riguardavano solo quegli utenti che avevano spazi o trattini nel loro UserName.

Soluzione era configurare User Manager per consentire quei caratteri in UserNames. Vuol dire che il mio database utente è stato migrato da Druppal direttamente a SQL Server e molti di questi utenti hanno evitato il criterio predefinito da UserValidator a User Manager.

Puoi trovare come configurare UserValidator per consentire caratteri non alfanumerici alla fine di questo thread:

Asp.NET – Id quadro 2 – Errore token non valido

Ok, queste ore sprecate – no, giorni – della mia vita. Dopo aver provato tutti gli altri suggerimenti in questo thread e in Asp.NET – Identity 2 – Errore Token non valido ho trovato che invece di chiamare

 await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); 

nel metodo Register subito prima del blocco GenerateEmailConfirmationTokenAsync

 await SignInAsync(user, isPersistent: false); 

è stato chiamato che è definito come

 private async Task SignInAsync(ApplicationUser user, bool isPersistent) { AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, await user.GenerateUserIdentityAsync(UserManager)); } 

Penso che questo sia stato causato dall’impalcatura dell’applicazione con una versione MVC ASP.Net precedente. Il metodo descritto può essere trovato in http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity dal 2013.