reset password token имеет неверное значение что это
это мой config/auth.php
при попытке сбросить пароль клиента я получаю сообщение об ошибке «этот токен недействителен».
1 ответ
я только что установил laravel5, перенес таблицу users и вставил пользователей в таблицу. теперь я хочу изменить пароль с помощью сброса пароля в laravel5. когда вы используете email для сброса пароля, появляется предупреждение bootbox о том, что мы отправили вам по электронной почте ссылку для.
Для пользовательской реализации вам может потребоваться сгенерировать токен вручную.
Похожие вопросы:
Я реализовал ASP.NET Identity в своем приложении MVC, скопировав код из шаблонов VS 2013. Основная вещь работает, но я не смог заставить пароль сброса работать. Когда я показываю страницу forgot.
Я пишу MVC 5 и использую Identity 2.0. Теперь я пытаюсь сбросить пароль. Но я всегда получаю ошибку invalid token для сброса токена пароля. public class AccountController : Controller < public.
Я использую devise gem для аутентификации. В моем приложении admin будет создавать пользователей, поэтому я хочу, чтобы ссылка на сброс пароля пользователя при создании admin создавала.
я только что установил laravel5, перенес таблицу users и вставил пользователей в таблицу. теперь я хочу изменить пароль с помощью сброса пароля в laravel5. когда вы используете email для сброса.
Я использую уведомление, чтобы отправить email пользователю, что кто-то создал для него учетную запись. Я пытаюсь понять, как отправить им действие на страницу пароля/сброса. Мне нужно добавить.
Мне нужно перезаписать сообщение об ошибке, если токен сброса пароля истек. По умолчанию он показывает токен сброса пароля недействителен, но вместо этого мне нужен другой текст. Я работаю с Laravel.
Я разрабатываю приложение Laravel. Сейчас я настраиваю функцию сброса пароля. Существует проблема с получением маркера сброса пароля обратно из базы данных, поскольку строка маркера изменяется при.
У меня возникла проблема в моем сбросе пароля и я получаю ошибку этого токена сброса пароля недействителен я не могу решить эту проблему: мой контроллер: class ResetPasswordController extends.
у меня возникла эта проблема при попытке сбросить пароль, после установки locale в моих маршрутах/интернете, как это: МАРШРУТЫ/WEB Route::get(‘/’, function () < return.
Reset password token is invalid #2871
Comments
jimiguru commented Feb 17, 2014
I’m having a devil of a time with this one.
Rails 4
Devise 3.2.2
Postgres 9.3.2
Using @token, not @reset_password_token
Token is being set properly in the DB as is remember_password_sent_at timestamp.
I can query on the command line for users = @token and get the desired result.
No matter what, when attempting to reset the PW I get Reset password token invalid.
The text was updated successfully, but these errors were encountered:
josevalim commented Feb 17, 2014
Hrm, can you post the logs of the web request? Maybe the information is not being sent as expected?
jimiguru commented Feb 17, 2014
josevalim commented Feb 17, 2014
Yeah, with the tokens filtered, it doesn’t really help. 😛 But you can see the token in the database query, is that the token you expected?
jimiguru commented Feb 17, 2014
Actually, the token being generated and stored in the DB differs than the token in the email.
For instance, I just attempted again and the token generated and stored by Devise is:
The token in the email notification is:
jimiguru commented Feb 17, 2014
Relevant line from the mailer template:
josevalim commented Feb 17, 2014
Right. That’s the idea. I am out of clues as what can be happening. Can you please provide an application that reproduces the error?
jimiguru commented Feb 17, 2014
So it may be that there is some hashing going on between the email process and Devise, sorry I’m not that familiar with the inner workings of Devise.
Anyway, the Token that is created and saved to the User model is the token that is being sought on the reset attempt.
It’s a mystery to me why this doesn’t work.
Token generated from log:
Token in email:
reset_password_token=_GEqBpbzGtuhR7jchNjC
Token in reset attempt:
«reset_password_token» = ‘bfef35e411e3d3009ef7466dd85adf7bc03223d95c0dc5ead6f1cc8a61765aa4’
Токен недействителен при сбросе пароля с помощью удостоверения ASP.NET
Я реализовал ASP.NET Identity в своем приложении MVC, скопировав код из шаблонов VS 2013. Основная вещь работает, но мне не удалось заставить работать сброс пароля. Когда я показываю страницу «забытый пароль», создается электронное письмо, содержащее токен. Этот токен возвращается методом:
Когда я нажимаю ссылку, открывается форма для сброса пароля, в которой пользователь может ввести свой адрес электронной почты и новый пароль. Затем выполняется вызов функции смены пароля:
Мне это кажется хорошим, но в результате всегда получается «Недействительный токен», и я не понимаю, почему это так.
5 ответов
Токен, сгенерированный UserManager в ASP.NET Identity, обычно содержит символы » + «, которые при передаче в качестве строки запроса заменяются на » » (пробел) в URL-адресе. В ResetPassword ActionResult замените » » на » + » следующим образом:
Это должно делать свое дело. У меня была такая же проблема, и я нашел ответ здесь.
Просто хотел добавить, что наиболее распространенной проблемой за пределами кодирования / декодирования HTML является то, что в вашей пользовательской записи в базе данных может отсутствовать SecurityStamp. В ASP.NET Identity есть ошибка, когда одна функция устанавливает значение null при создании токена, тогда как другая при проверке токена проверяет наличие пустой строки.
Если ваш SecurityStamp имеет значение null или пустую строку, это вызовет проблему с недопустимым токеном.
В моем случае это произошло из-за того, что данные в базе данных были неправильно импортированы из другой базы данных. Поле SecurityStamp было пустым, поэтому я получил ошибку неверного токена.
Если ваш SecurityStamp изменится после создания вашего токена, токен также недействителен.
Так, например, вы генерируете свой токен, используя
Форма восстановления пароля
У нас уже созданы формы регистрации и авторизации и реализован функционал подтверждения адреса электронной почты, настало время добавить функционал восстановления пароля.
Замечание! Перед тем как продолжить, рекомендую сначала прочитать предыдущие статьи, связанные с созданием формы регистрации и авторизации. Если Вы это уже сделали, то можете идти дальше.
Замечание! После скачивания архива с исходными файлами статьи, не забудьте поменять данные для подключения к базе данных и указать адрес Вашего сайта. Всё это нужно сделать в файле dbconnect.php.
И так приступим. Первое что нам нужно сделать, это добавить ссылку » Забыли пароль? «, на страницу авторизации рядом с кнопкой » Войти «.
Открываем файл » form_auth.php «, и сразу после ячейки с кнопкой » Войти «, добавляем ячейку со ссылкой » Забыли пароль? «, которая будет ввести на файл » reset_password.php «.
Файл » reset_password.php » будет отвечать за вывод страницы восстановления пароля.
Алгоритм восстановления пароля
На страницу восстановления пароля, попросим пользователя ввести свой почтовый адрес. При обработке данной формы мы проверим, зарегистрирован ли пользователь с таким почтовым адресом, если да, то на указанный почтовый адрес отправим письмо со ссылкой, которая будет ввести на страницу установки нового пароля, иначе, если такой пользователь не зарегистрирован то, выведем сообщение об ошибке.
И так, создаём файл » reset_password.php » и пишем код.
Добавляем блок JavaScript кода, для проверки формата введённого почтового адреса. То есть с помощью этого кода мы проверяем, ввёл ли пользователь правильный почтовый адрес.
Дальше, добавим блок для вывода разных сообщений. Эти сообщения мы будем добавлять в сессию при обработке формы с этой страницы.
Дальше, выведем форму, которая попросит пользователя ввести свой почтовый адрес. Эту форму мы будем вывести только для не авторизованных пользователей. То есть если пользователь уже авторизован, и он напрямую зайдёт на страницу » site.ru/reset_password.php » то он получить сообщение о том, что он уже авторизован.
Условие «if(!isset($_GET[«hidden_form»]))«, нужно для того чтобы спрятать эту форму после её успешной обработки. Вместо этой формы мы выведем какое-то сообщение.
Идём в браузер, заходим на страницу авторизации, нажимаем на ссылку » забыли пароль » и смотрим, что у нас получилось.
Обработка формы восстановления пароля
Обращаем внимание на значение атрибута » action » формы восстановления пароля. В нём мы указали файл » send_link_reset_password.php «.
Соответственно нам нужно создать этот файл и приступить к написанию кода для обработки данной формы.
Добавляем новое поле в таблицу users
Заходим в phpMyAdmin, открываем таблицу » users «, и кликаем на вкладке » структура «. Выбираем радио-кнопку » После «, из выпадающего списка выбираем поле » password » и нажимаем на кнопку ОК.
После нажатия на кнопку OK, откроется следующее окно, где нужно будет ввести необходимые данные.
После того как ввели необходимые данные, нажимаем на кнопку » сохранить «.
Всё, поле » reset_password_token «, добавили. Идём дальше.
Открываем созданный файл » send_link_reset_password.php » и пишем код.
Дальше мы должны проверить капчу и обработать полученный почтовый адрес. В указанное место » //(1) Место для следующего куска кода » пишем следующий код:
После успешной обработки капчи и полученного почтового адреса, мы должны сделать запрос к базе данных, для того чтобы проверить зарегистрирован ли у нас такой пользователь, и подтверждён ли указанный почтовый адрес.
В указанное место » // (2) Место для составления запроса к БД «, пишем следующий код:
Зарегистрирован ли у нас такой пользователь, мы проверили, теперь проверим, подтверждён ли указанный почтовый адрес. В указанное место » // (3) Место для следующего куска кода «, пишем следующий код:
Если указанный почтовый адрес не подтверждён, то мы в сессию добавляем сообщение об ошибке и перенаправляем пользователя обратно на страницу восстановления пароля.
Иначе, мы составляем токен, добавляем его в базу данных, в поле » reset_password_token » таблицы » users » и отправляем пользователю письмо со ссылкой на страницу установки нового пароля.
Как видите из представленного кода, ссылка получает параметры email и токен, а формируется она следующим образом:
Посмотрим на содержание полученного письма:
И так, как мы видим, письмо отправилось успешно. С этим этапом мы закончили.
Установка нового пароля
В письме, если наведём мышку на ссылку, то, заметим что в левом нижнем углу появиться адрес данной ссылки. Из этого адреса, мы видим, что ссылка введёт на файл » set_new_password.php «.
Данный файл будет отвечать за вывод страницы установки нового пароля. То есть, с помощью этого файла, мы выведем форму, через которую пользователь сможет установить новый пароль.
Создаём этот файл » set_new_password.php «, открываем его и пишем следующий код:
Здесь мы проверяем, существуют ли параметры token и email в ссылке, если они существуют, то идём дальше, иначе, выводим сообщение об ошибке. Вы можете сделать так чтобы, в случае ошибки, пользователя перенаправили на главную страницу.
Дальше нам нужно проверить, совпадает ли токен из ссылки с токеном из базы данных. Если токены совпадают, то выводим форму установки нового пароля, иначе, выводим сообщение об ошибке.
В указанное место » //(1) Место для вывода формы установки нового пароля «, подключаем шапку и подвал, добавляем блок JavaScript кода и выводим форму установки нового пароля.
В итоге, у нас получилась вот такая страничка:
JavaScript код, нужен для того чтобы проверить длину вводимого пароля, и совпадает ли пароль из поля » Повторите пароль » с паролем из поле » Введите новый пароль «.
Обработка формы установки нового пароля
Как Вы заметили, в значение атрибута » action » указан файл » update_password.php «. С помощью этого файла мы обработаем форму установки нового пароля. То есть, обновим пароль в базе данных, у указанного пользователя.
Создаём этот файл » update_password.php » и пишем следующий код:
Здесь мы проверяем, была ли нажата кнопка » Изменить пароль «.
Как Вы заметили, мы обработчику передаём скрытно токен и email. Токен здесь нужен для того чтобы мы смогли возвращаться обратно на страницу установки нового пароля, в случае какой-то ошибки, которая может возникнуть при обработке формы. То есть для того чтобы возвращаться из обработчика обратно на страницу установки нового пароля, нам нужно в ссылку передать токен и email.
Поэтому в обработчике, мы должны проверить существуют ли эти данные в массиве POST. Также мы должны обработать полученный пароль.
В указанное место » //(1) Место для следующего куска кода «, пишем следующий код:
Теперь, после успешной обработки полученных данных, настало время, обновить пароль у указанного пользователя.
В указанное место » //(2) Место для следующего куска кода «, пишем следующий код:
Если пароль был изменён успешно, без ошибок, то мы увидим соответствующее сообщение:
На этом всё дорогие читатели, с реализации функционала восстановления пароля мы закончили. Но, перед тем как завершить данную статью, хочу Вам показать ещё один способ восстановления пароля.
Данный способ проще в реализации, но он имеет один небольшой недостаток. Я его Вам показываю только для того чтобы Вы знали что существует и такой вариант реализации. В чем его недостаток описано ниже.
Простой способ восстановления пароля
Данный способ отличается от предыдущего тем, что на указанную почту отправляется не ссылка на страницу установки нового пароля, а уже сгенерированный пароль.
Здесь также необходимо добавить ссылку » Забыли пароль «, при нажатии на которой попадаем на страницу где нужно ввести почтовый адрес. В предыдущем способе, за эту страницу отвечал файл » reset_password.php «. Можно его взять оттуда, потому что он будет такой же и в этом способе.
После того как пользователь ввёл свой адрес электронной почты и нажал на кнопку » Восстановить «, мы на указанный адрес отправим новый сгенерированный пароль.
За обработку формы восстановления пароля, из файла » reset_password.php «, у нас будет отвечать файл » send_new_password.php «, поэтому в значение атрибута » action «, у формы, напишем название этого файла. Создаём данный файл, открываем его и читаем дальше :).
Код данного файла, очень похож на код файла » send_link_reset_password.php «, за исключением некоторых строк. Поэтому копируем весь код файла » send_link_reset_password.php «, и вставляем его в файл » send_new_password.php «. Изменения нужно внести внутри блока else, который находится внутри цикла while.
Значит в указанное место » Место, где нужно произвести изменения » пишем следующий код:
Здесь мы генерируем новый пароль, то есть берем последние 7 символов из хэша, который формируется за счёт указанного email и текущего времени. Обновляем пароль в базе данных для указанного пользователя. И на указанный почтовый адрес отправляем письмо с новым паролем.
На указанный почтовый адрес, придёт такое письмо:
И всё, пароль восстановлен. Теперь пользователь может авторизоваться со своим новым паролем.
В чем недостаток данного способа?
А недостаток здесь в том что, злоумышленник или любой другой пользователь может ввести email какого-то другого зарегистрированного пользователя и автоматически изменить его пароль.
Согласитесь, что зарегистрированный пользователь сильно удивится, что его пароль, внезапно изменился. Конечно, потери не критичны, но всё-таки это неприятно.
И здесь я завершаю свою статью. Теперь Вы знаете, как реализовать функционал восстановления пароля двумя способами, и можете использовать эти способы реализации в своих проектах.
Замечание! После скачивания архива с исходными файлами статьи, не забудьте поменять данные для подключения к базе данных и указать адрес Вашего сайта. Всё это нужно сделать в файле dbconnect.php.
Желаю хорошего дня и отличного настроения!
Похожие статьи:
Видео прикол по теме:
Понравилась статья?
Тогда поделитесь ею с друзьями и подпишитесь на новые интересные статьи.
Поделиться с друзьями:
Подписаться на новые статьи:
Поддержите пожалуйста мой проект!
Если у Вас есть какие-то вопросы или предложения, то можете писать их в комментариях или мне на почту sergiu1607@gmail.com. И если Вы заметили какую-то ошибку в статье, то прошу Вас, сообщите мне об этом, и в ближайшее время я всё исправлю.
Автор статьи: Мунтян Сергей
Rails Devise: Set password reset token and redirect user
In my app for a certain use case I create a new user (programmatically set the password) and send them a confirmation email.
I would like them to be able to change their password immediately after confirming (without having to enter the system generated one which I don’t want to send them)
In effect I would like
1) System creates a new user account with generated password.
2) System sends confirmation email.
3) User clicks confirmation and is redirected to enter in their password (effectively send them to a URL like below)
Any help / pointers would be great.
4 Answers 4
A simple way to have just one step for users to confirm email address and set initial password using the link you proposed.
Send one email your app generates, including a reset_password_token, and consider user’s possession of that token confirmation of the validity of that email address.
In system account generation code, assuming User model is set up with :recoverable and :database_authenticatable Devise modules.
Make the devise reset password view a little clearer for users when setting initial password.
views/devise/passwords/edit.html.erb
Generated Email
No need to include :confirmable Devise module in your User model, since accounts created by your app won’t get accessed without the reset_password_token in the email.
Devise will handle the submit and clear the reset_password_token field.
See devise_gem_folder/lib/devise/models/recoverable.rb and database_authenticatable.rb for details on reset_password_token method and friends.
If you want to use Devise :confirmable module rather than this approach, see the Devise wiki page.