2016-01-24 1 views
0

Я просто пытаюсь проверить токен, используя другое действие в моем контроллере.Не удалось проверить токен электронной почты в другом действии

В одном действии я генерирую токен и перенаправляю другое действие.

string token = await userManager.GenerateEmailConfirmationTokenAsync(user.Id); 
string userId = HttpUtility.UrlEncode(user.Id); 
string emailToken = HttpUtility.UrlEncode(token); 
return RedirectToAction("TestToken", new { userId = userId, emailToken = emailToken }); 

В TestToken действии, я декодировать атрибуты и попытаться подтвердить его, но result всегда ложно, с ошибкой Invalid token.

string decodedUserId = HttpUtility.UrlDecode(userId); 
string decodedToken = HttpUtility.UrlDecode(emailToken); 
IdentityResult result = await userManager.ConfirmEmailAsync(decodedUserId, decodedToken); 

Если я, вместо того, чтобы перенаправлять на TestToken действия , просто введите код сразу после первого, проверка будет успешной ... Что может быть неправильно?

ответ

0

Если посмотреть на примеры, предусмотренных в следующих ссылок

Create a secure ASP.NET MVC 5 web app with log in, email confirmation and password reset (C#)

Account Confirmation and Password Recovery with ASP.NET Identity (C#)

вы увидите, что они не кодируют

string token = await userManager.GenerateEmailConfirmationTokenAsync(user.Id); 
return RedirectToAction("TestToken", new { userId = user.Id, emailToken = token }); 

или декодировать идентификатор пользователя или токен.

public async Task<ActionResult> TestToken(string userId, string emailToken) { 
    //... Code removed for brevity 
    IdentityResult result = await userManager.ConfirmEmailAsync(userId, emailToken);   
    //... Code removed for brevity 
    return View(); 
} 
Смежные вопросы