1

Я видел это несколько раз, но я все еще не могу его решить.MVC 5, Invalid Token

Мой процесс регистрации хорошо работает в 99% случаев. Но иногда я получаю недопустимую ошибку токена при подтверждении адреса электронной почты (по ссылке в электронном письме). Я даже URL-кодирование/декодирование токена теперь тоже, но я все равно получаю случайную ошибку.

Регистрация действие:

string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); 
code = System.Web.HttpUtility.UrlEncode(code); 
var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); 

и Подтверждение действия:

code = System.Web.HttpUtility.UrlDecode(code); 
var result = await UserManager.ConfirmEmailAsync(userId, code); 

Я могу подтвердить каждый 'провал' пользователь действительно имеет штамп безопасности. И имя/имя пользователя не содержит никаких хитроумных символов.

Есть ли что-нибудь еще, что я могу проверить?

+0

У вас есть 'MachineKey' в вашем web.config? – trailmax

+0

Хммм нет, я этого не делаю. Я выработаю, как добавить его и сообщить, как я себя чувствую. Поскольку проблема прерывистая, может потребоваться некоторое время, чтобы определить, работает ли она или нет. Спасибо за указатель. –

+1

Часть маркера содержит имя веб-приложения (определенное в IIS), и если вы запустите его в облаке, после перезагрузки приложения вы можете получить другое имя - это также может вызвать вашу проблему. Но машинный ключ _hould_ исправить. Просто для подтверждения - получите токен, перезапустите IIS, попробуйте подтвердить токен, затем сделайте то же самое с машинным ключом. – trailmax

ответ

0

Вы можете попробовать этот код.

var encodedCode= code.Base64ForUrlEncode(); 
var decodedCode= encodedCode.Base64ForUrlDecode(); 

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); 
     } 
} 
+0

http://stackoverflow.com/questions/27535233/aspnet-identity-invalid-token-on-confirmation-email –

+0

http://stackoverflow.com/questions/28741578/asp-net-identity-2-1-password -reset-недействительные жетоны/38634582 # 38634582 –