2016-03-21 27 views
0

私はEmail(ASP.NET MVC 5)からResetPasswordアクションを呼び出しています。クエリ文字列paramは、asp.net mvcアクション内でURLエンコードされていません

http://localhost:34162/Account/ResetPassword?code=BwEA181bAECFMcn1vwPdrctS/wcyncKPxGT9Zx1tDuPwKGpe9H1W7LI3Zm9fM+3aA5Fok5GhLPBHqbtiGfpL8Cmdx7RNC6RJ7d6t9ZgFBwgwYk3zssU1Nh64PWHJAabVG9Wv9VWDNdj+Fz0UA712XA== 

これはブラウザのアドレスです。

しかし、デバッグ中に私がResetPasswordのアクションでこの文字列を受け取る:

// GET: /Account/ResetPassword 
    [AllowAnonymous] 
    public ActionResult ResetPassword(string code) 
    { 
     return code == null ? View("Error") : View(); 
    } 

「コード」である:

BwEA181bAECFMcn1vwPdrctS/wcyncKPxGT9Zx1tDuPwKGpe9H1W7LI3Zm9fM 3aA5Fok5GhLPBHqbtiGfpL8Cmdx7RNC6RJ7d6t9ZgFBwgwYk3zssU1Nh64PWHJAabVG9Wv9VWDNdj Fz0UA712XA== 

すなわち、それはURLエンコードではなく、当然のパスワードであります無効なトークンメッセージでリセットされません。

アクションで正しい文字列を取得するにはどうすればよいですか?

答えて

0

を見ることができますエンコードする方法についての詳細はFORE。最初はうまくいかないはずです。マイクロソフトがスラッシュとプラスでトークンを使用する必要性を感じている理由を知りたがっています。とにかく

、私はBase64でエンコードされ、次のようにトークンをデコード:

をユーザーに電子メールを送信する前に:

を...

受け
  string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id); 

      code = CommonFuncs.Base64Encode(code); 

      EmailsBL.PasswordResetEmail(model.Email, code); <-- emailing the link for password rest to the user 

そして:

// POST: /Account/ResetPassword 
    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> ResetPassword(ResetPasswordViewModel model) 
    { 
     ///////////////////////////////////////////////////////////////////// 
     // NOTE: if email is not CONFIRMED then reset password silently fails 
     //////////////////////////////////////////////////////////////////// 


     if (!ModelState.IsValid) 
     { 
      return View(model); 
     } 

     model.Code = CommonFuncs.Base64Decode(model.Code); 

つまり、トークンを復号します。この次

はちょうど完全性のためである:

public static string Base64Encode(string plainText) 
    { 
     string base64string = null; 
     if (plainText != null) 
     { 
      var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText); 
      base64string = System.Convert.ToBase64String(plainTextBytes); 
     } 
     return base64string; 
    } 

    public static string Base64Decode(string base64EncodedData) 
    { 
     string decodedBase64String = null; 
     if (base64EncodedData != null) 
     { 
      var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData); 
      decodedBase64String = System.Text.Encoding.UTF8.GetString(base64EncodedBytes); 
     } 
     return decodedBase64String; 
    } 
関連する問題