Создание альтернативной формы сброса пароля

Аватар пользователя engenes engenes 29 ноября 2017 в 20:02

Общая задача состоит в том чтобы реализовать на сайте сброс пароля по номеру телефона и смс с кодом
идея застряла на этапе ввода пользователем кода из смс.

Допустим пользователь ввел в форму, прошла отправка на сервер, где код сравнился с тем что есть в базе или его хешем (не важно, по ходу разберусь) если все ок, хочу чтобы пользователя перекинуло сразу на страницу настройки своего аккаунта и задания нового пароля то есть:
http://сайт/user/1/edit?pass-reset-token=токенттокентокен
вопрос: как получить токен? (гуглил, функцию получения токена не нашел) в принципе удовлетворит мой интерес к этой задаче... Но..

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

Тогда другой вариант (более удобный) если все ок, хочу чтобы прошла авторизация и меня перекинуло на страницу с формой задания нового пароля состоящую из двух полей:
"парль"
"повторить"
после отправки формы новый пароль сразу же записался в базу.

тогда вопрос такой:
- как пройти авторизацию в случае успеха?
- как получить хеш пароля который я смогу поместить в базу?
по второй части пробовал

<?php
$password 
'мойуникальныйпароль';
$hash user_hash_password($password);
echo 
$hash;
?>

в ответ 500 ошибка

Лучший ответ

Аватар пользователя ХулиGUN ХулиGUN 30 ноября 2017 в 12:23
1

<a href="mailto:sas@drupal.org">sas@drupal.org</a> wrote:

Стандартный механизм уже реализует токен его хранение и вход с mail, Вам только надо sms отправить одновременно с mail.

Дичь задвигаешь)))
engenes wrote:

Тогда другой вариант (более удобный) если все ок, хочу чтобы прошла авторизация

Это априори стандартное поведение в подобных кейсах.

Сам механизм, собственно, следующий:
1. Вводим номер телефона, отправляем на сервер
2. Генерируем код для смс, сохраняем куда-нить юзера по номеру телефону, код для смс и флаг использования
3. Вводим код из смс в форму (номер телефона в скрытом поле), отправляем на сервак
4. Проверяем на сервере последнюю запись из номера телефона, код и флаг использования, если всё ок, то hook_user_login и редиректим на свою кастомную форму смены пароля.
5. Профит

Комментарии

Аватар пользователя sas@drupal.org sas@drupal.org 30 ноября 2017 в 7:42

Стандартный механизм уже реализует токен его хранение и вход с mail, Вам только надо sms отправить одновременно с mail.

Аватар пользователя ХулиGUN ХулиGUN 30 ноября 2017 в 12:23
1

<a href="mailto:sas@drupal.org">sas@drupal.org</a> wrote:

Стандартный механизм уже реализует токен его хранение и вход с mail, Вам только надо sms отправить одновременно с mail.

Дичь задвигаешь)))
engenes wrote:

Тогда другой вариант (более удобный) если все ок, хочу чтобы прошла авторизация

Это априори стандартное поведение в подобных кейсах.

Сам механизм, собственно, следующий:
1. Вводим номер телефона, отправляем на сервер
2. Генерируем код для смс, сохраняем куда-нить юзера по номеру телефону, код для смс и флаг использования
3. Вводим код из смс в форму (номер телефона в скрытом поле), отправляем на сервак
4. Проверяем на сервере последнюю запись из номера телефона, код и флаг использования, если всё ок, то hook_user_login и редиректим на свою кастомную форму смены пароля.
5. Профит

Аватар пользователя engenes engenes 30 ноября 2017 в 16:00

а что насчет кастомной формы?
ввели новый пароль, он прошел через функцию

<?php
$password 
'мойуникальныйпароль';
$hash user_hash_password($password);
echo 
$hash;
?>

вот вставил код в блок на сайте, по-хорошему, я должен увидеть хеш но вижу 500 ошибку, в чем дело не пойму.

Аватар пользователя Semantics Semantics 30 ноября 2017 в 16:04
1

engenes wrote:

вот вставил код в блок на сайте, по-хорошему, я должен увидеть хеш но вижу 500 ошибку, в чем дело не пойму.

В блоках использовать return надо.
А причина в логах сервера, имхо, password.inc нужно подгрузить
      require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');