2016-03-21 14 views
0

Bir e-postadan ResetPassword eylemini arıyorum (ASP.NET MVC 5).sorgu dizisi param, asp.net mvc eyleminin içinde URL kodlanmamış değil

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

Bu, Tarayıcımdaki adres.

Ancak, hata ayıklama ben ResetPassword Eylem bu dizeyi alırsınız:

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

'kod' geçerli:

BwEA181bAECFMcn1vwPdrctS/wcyncKPxGT9Zx1tDuPwKGpe9H1W7LI3Zm9fM 3aA5Fok5GhLPBHqbtiGfpL8Cmdx7RNC6RJ7d6t9ZgFBwgwYk3zssU1Nh64PWHJAabVG9Wv9VWDNdj Fz0UA712XA== 

yani o url kodlanmış değildir ve elbette şifre geçersiz belirteç mesajı ile sıfırlanamaz.

Eylemde doğru dizeyi almak için ne yapabilirim?

cevap

0

bakabilirsiniz kodlamak için nasıl

[AllowAnonymous] 
public ActionResult ResetPassword(string code) 
{ 
    code = Server.HtmlEncode(code); 
} 

Fore daha fazla bilgi. İlk etapta çalışmamalı gibi görünüyor. Keşke Microsoft'un tokenleri artı çizgileriyle kullanma ihtiyacının neden olduğunu bilmesini isterdim. alırken ... sonra

  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 

Ve

:

neyse, sadece Base64 kodlanmış ve aşağıdaki gibi jetonu deşifre:

kullanıcıya E-posta göndermeden önce

// 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); 

, örneğin belirtecin çözümlenmesi.

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; 
    } 
: Bu aşağıdaki

sadece şeyiyle olduğu