2016-12-18 3 views
0

Когда пользователь нажимает ссылку Подтвердить электронную почту в полученном им электронном письме, URL направляет пользователя методу ConfirmEmailAsync в Контроллере учетных записей. Затем этот метод возвращает результат вызова поставщику токенов электронной почты.Aspnet Core 1.0 Identity User Manager ConfirmEmailAsync возвращает InvalidToken

var result = await _userManager.ConfirmEmailAsync(user, code); 

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

Я пробовал кодировку и декодирование Base64 без каких-либо успехов, хотя я считаю, что это делается автоматически asp-net-core-identity-token-providers.

Любые идеи?

ответ

1

Сгенерированные маркеры через идентификатор привязаны к SecurityStamp для пользователя. Если штамп обновляется по какой-либо причине, все ранее отправленные токены становятся недействительными. Изменение или установка пароля приведет к тому, что это произойдет.

Это может быть проблема порядка операций. Вы случайно сохраните пароль регистра после отправки сообщения электронной почты для проверки электронной почты, которую они предоставили?

Например, это будет терпеть неудачу:

  • Отправить письмо с токена
  • Сохранить информацию регистра как пароль
  • Попробуйте использовать маркер.

Вместо этого должно работать:

  • Сохранить инфо регистр
  • Отправить по электронной почте с токена
  • Try использовать маркер

Этот сценарий является всего лишь пример, как я не может быть уверен, что именно так настроен ваш код. Тем не менее, если жетоны одинаковы, скорее всего проблема с безопасностью. Следите за ним в своей базе данных на протяжении всего процесса и проверяйте, обновляется ли что-то.

+0

Во время регистрации я сохраняю пользователя на db. ЕСЛИ это успешно, создается токен электронной почты и электронной почты. Затем отправляется электронное письмо. Никакие другие действия не выполняются для пользователя. – Greg

+0

Фактически вы на 100% правильны. Я добавлял пользователя к роли ПОСЛЕ отправки электронной почты и изменения штампа безопасности. Я исправил это, и теперь все работает так, как ожидалось. Большое спасибо!! – Greg

+0

@Greg Счастливые помочь. :) –

Смежные вопросы