Подтверждение по электронной почте - странное поведение - PullRequest
0 голосов
/ 08 марта 2019

Кто-нибудь имеет представление, почему это происходит со мной?

В этом случае «результат» равен «Успех» :

public async Task<IActionResult> TestConfirmInSameRequest(string userId)
{
    var user = await this._userManager.FindByIdAsync(userId);
    var code = await this._userManager.GenerateEmailConfirmationTokenAsync(user);
    var result = await this._userManager.ConfirmEmailAsync(user, code); 

    var newLocation = ...
    return Redirect(newLocation);
}

И вв этом случае 'result' всегда равен 'InvalidToken' (даже когда я вручную копирую исходный код и проверяю его)

public async Task<IActionResult> ConfirmEmail(string userId, string code)
{
    var user = await this._userManager.FindByIdAsync(userId);
    var result = await this._userManager.ConfirmEmailAsync(user, code); 

    var newLocation = ...;
    return Redirect(newLocation);
}

protected async Task SendConfirmationEmail(string userId, bool originMobile)
{
    var user = await this._userManager.FindByIdAsync(userId);
    var code = await this._userManager.GenerateEmailConfirmationTokenAsync(user);

    var encodedCode = HttpUtility.UrlEncode(code);
    var callbackUrl = $"https://.../api/account/confirmemail?userId={userId}&code={encodedCode}";

    await this._userService.SendConfirmationEmailAsync(userId, callbackUrl);
}

1 Ответ

0 голосов
/ 08 марта 2019

При отправке ( SendConfirmationEmail ) по электронной почте вы urlencode токен, но в ConfirmEmail вы не decoding токен.

Кодирование просто гарантирует, что его можно будет использовать в URL-адресе, а в URL-адресе нет разрывных символов. Однако токен, который вы должны проверить, не является закодированным , это все равно токен, который вы получили до кодирования. Другими словами; вам нужно снова декодировать токен, чтобы он вернулся к тому, как он был при создании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...