Я использую Asp.Net-Identity-2, и я разработал поток проверки электронной почты.
В моем локальном окружении все работает хорошо, но как только я развернул код на своем сервере и протестировал тот же сценарий (который работает на моем локальном компьютере) на моем сервере, он говорит «Недопустимый токен».
сценарий
Я уже проверяю все возможные ошибки, которые есть в этом вопрос и у меня все в порядке, поэтому отлично работает на моем местном. Должно быть что-то с сервером. Я думал, что дата сервера может повлиять, но я поставил на синхронизацию дату моего сервера баз данных и моего веб-сервера, и он все еще не работает.
Я использую GenerateEmailConfirmationTokenAsync для генерации токена и использую ConfirmEmailAsync для подтверждения токена. Я действительно выполняю эти методы, потому что я помещаю логи для этого, чтобы я мог быть уверен в этом (Когда вы не знаете, что происходит, вы должны быть уверены, что все правильно?)
Я уже кодирую / декодирую URL, чтобы токен не был поврежден. Я уверен в этом, потому что я положил логи и запустил код на сервере и проверил пару раз.
У пользователя есть отметка безопасности в базе данных, так что это не так
TokenLifeSpan составляет 8 дней. Так что это не так.
Я даже попробовал свойство AllowOnlyAlphanumericUserNames = false в UserValidator и даже UniqueEmail = false
userManager.UserValidator = new UserValidator<User>(userManager) { AllowOnlyAlphanumericUserNames = false, UniqueEmail = false };
Код для генерации токена
ApplicationUserManager.GenerateEmailConfirmationTokenAsync(userId);
Код для подтверждения токена
ApplicationUserManager.ConfirmEmailAsync(subject, token);
Любая идея?
Обновить
Он работал на сервере / локально со всеми клиентами, но не с клиентом Php, а клиент Php выполнял дополнительную работу, которая изменяла марку безопасности, отсюда и проблема.
Поскольку единственный клиент на сервере был в Php, я подумал, что что-то не так с сервером, а не с моей локальной средой. После установки всей среды (с php-клиентом) в моей локальной системе и отладки я обнаружил проблему. Пожалуйста, прочитайте ответ ниже.
Ну, ошибка была вызвана кодом, который выполнялся после генерации токена. Этот код изменял метку безопасности пользователя в базе данных.
Поскольку Asp.Net Identity 2 использует штамп безопасности для создания и проверки токена, и он был изменен после генерации токена, токен всегда был недействительным.
Спасибо!
Других решений пока нет …