1

私はこれについて数回議論しましたが、まだ解決できません。MVC 5、無効なトークン

私の登録プロセスは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); 

私は、各 '失敗' ユーザがセキュリティスタンプを持っている確認することができます。そして、名前/ユーザ名にdodgy文字は含まれていないようです。

他に何か確認できますか?

+0

web.configに 'MachineKey'がありますか? – trailmax

+0

うーん、私はしません。私はどのように1つを追加し、私がどのように乗っているかを教えてくれます。断続的な問題であるため、それが機能しているかどうかを確認するのにはしばらく時間がかかることがあります。ポインタありがとう。 –

+1

トークンの一部には、(IISで定義された)Webアプリケーションの名前が含まれています。クラウドで実行すると、アプリケーションの再起動後に別の名前が表示される可能性があります。しかし、マシンキー_それを修正する必要があります。確認するには - トークンを取得し、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-invalid-tokens/38634582#38634582 –

関連する問題