Проверка действительности токена электронной почты удостоверения личности

У меня есть основное приложение .net, в котором после регистрации я делаю токен электронной почты и отправляю его по электронной почте. Идея состоит в том, что пользователь может прийти с этим токеном электронной почты в клиентском приложении, и я хочу проверить его действительность (если срок его действия истек, если это правильный токен, связанный с данным электронным письмом).

Я попытался найти в userManager любой метод, который я могу использовать. То, что я нашел, это VerifyUserTokenAsync(ApplicationUser user, string tokenProvider, string purpose, string token), но я не знаю, что передать в параметрах.

Итак, может ли кто-нибудь помочь с tokenProvider и purpose? Я хочу отметить, что токен электронной почты создается с помощью GenerateEmailConfirmationTokenAsync. Я могу проверить токен с помощью ConfirmEmailAsync, если результат не будет успешным, токен недействителен, но я не хочу устанавливать для EmailConfirmed значение true, если токен действителен.


person TrulyXax    schedule 02.08.2018    source источник


Ответы (1)


Полезный способ решить эту проблему — взглянуть на реализацию из ConfirmEmailAsync:

public virtual async Task<IdentityResult> ConfirmEmailAsync(TUser user, string token)
{
    // ...
    if (!await VerifyUserTokenAsync(user, Options.Tokens.EmailConfirmationTokenProvider, ConfirmEmailTokenPurpose, token))
    {
        return IdentityResult.Failed(ErrorDescriber.InvalidToken());
    }
    // ...
}

Как и следовало ожидать, ConfirmEmailAsync вызывает VerifyUserTokenAsync. Второй и третий параметры (tokenProvider и purpose), передаваемые в этот метод, предоставляются с использованием свойств самого класса UserManager. Снова взглянув на источник, становится ясно, что и Options, и ConfirmEmailTokenPurpose общедоступны:

public const string ConfirmEmailTokenPurpose = "EmailConfirmation";
// ...    
public IdentityOptions Options { get; set; }

Учитывая все это, вы можете вызвать VerifyUserTokenAsync так:

await userManager.VerifyUserTokenAsync(
    userYouAlreadyHave,
    userManager.Options.Tokens.EmailConfirmationTokenProvider,
    userManager.ConfirmEmailTokenPurpose,
    tokenYouAlreadyHave);

Если этот вызов возвращает true, маркер действителен.

person Kirk Larkin    schedule 02.08.2018