2016-03-15 5 views
1

Я пытаюсь подтвердить электронную почту с помощью системы Identity 2.0 ASP.NET.Строка не принимается правильно в действии asp.net с использованием GET

Все работает плавно. Я получаю токен (код) в электронной почте, а затем нажимаю его.

http://www.mywebsite.com/Account/[email protected]&token=bkuVkQZUdEYrcrkcGWuzuPJsPt9cgk77oEZg5c4NVzfjye5THEtzQunBN7+/3SBOEbbmWD2K1loZfEUTh0ggm3qKuvKYGl9b0TWJBStHEeq8/G5RJ+dAvHh/fdt8Vtt5xyxHUgXMgT6+tDMox0Skfg== 

Однако, когда я получаю маркер в моем действии, плюс знаки удаляются и заменяются пробелами. И, очевидно, подтверждение терпит неудачу.

// GET: /Account/ConfirmEmail 
[AllowAnonymous] 
public async Task<ActionResult> ConfirmEmail(string Email, string token) 
{ 
    if (Email == null || token == null) 
    { 
     return View("Error"); 
    } 
    ApplicationUser user = UserManager.FindByEmail(Email); 
    var result = await UserManager.ConfirmEmailAsync(user.Id, token); 
    if (result.Succeeded) 
    { 
     return RedirectToAction("Confirmed", "Account"); 
    } 
    else 
    { 
     return View("Error"); 
    } 
} 

Я получаю эту фишку:

bkuVkQZUdEYrcrkcGWuzuPJsPt9cgk77oEZg5c4NVzfjye5THEtzQunBN7 /3SBOEbbmWD2K1loZfEUTh0ggm3qKuvKYGl9b0TWJBStHEeq8/G5RJ dAvHh/fdt8Vtt5xyxHUgXMgT6 tDMox0Skfg ==

Что я должен сделать, чтобы избежать этого?

+0

Попробуйте «url закодировать» ваш токен. у вас есть некоторые косые черты, которые могут испортить разбор. Или вы можете использовать настраиваемое связующее устройство для правильного чтения токена. Вот статья о привязках к модели: http://www.codeproject.com/Articles/605595/ASP-NET-MVC-Custom-Model-Binder –

ответ

0

Вы можете кодировать маркер после ее получения:

string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); 
code = System.Web.HttpUtility.UrlEncode(code); 

таким образом все специальные символы в вашем маркере будет правильно интерпретированы всеми браузерами.

+0

Некоторые полезные статьи: http://tech.trailmax.info/2015/ 05/жерех-нетто-идентичностью недействителен-токен-для-пароль-сброс или-почта-подтверждение / –