Хочу невероятного! :) При создании ноды анонимом, создавать ему профиль и назначить его автором этой самой ноды

Главные вкладки

Аватар пользователя shevgeny shevgeny 24 июля 2013 в 16:51

Есть тип материала c полем "email"

Нужно реализовать следующую схему:

Аноним создает материал, вводя в поле email своё мыло,
а мы проверяем, зарегистрирован ли этот email на сайте

А. Пользователь с таким мылом уже есть:
А.1. Создаём материал
А.2. Назначаем пользователя, которому принадлежит указанный в поле ноды email, автором этого материала

Б. Пользователя с таким мылом нет:
Б.1. Регистрируем пользователя
Б.2. Отправляем письмо с данными для доступа
Б.3. Назначаем этого пользователя автором этого материала
Б.4. Создаём материал

Вопрос один: как? Smile

Комментарии

Аватар пользователя shevgeny shevgeny 24 июля 2013 в 17:23

ХулиGUN wrote:
"shevgeny" wrote:
Не, ну открыли Америку! Посмотрите на теги в материале Wink Понятное дело, что Rules.

Ну раз понятно, что от нас то хотите?
Можно обойтись 1 рулсом, можно 2-мя
В кондишине делаете проверку на email и тип атериала
В экшене присваете соответствующие значения сущностям

Можно просто проверку на тип материала, в экшн - пхп, где описываете всю Вашу логику. API в помощь

Проверку типа материала я сделал. Сделал и регистрацию пользователя. Но не могу разобраться с:
1) Как проверить, есть ли такой пользователь
2) Как сгенерировать для него username
3) Что с паролем?

Аватар пользователя shevgeny shevgeny 24 июля 2013 в 17:19

UPD1
Я нашел PHP, который создает пользователя:

<?php// Генерируем случайный пароль на 8 символов
$password = user_password(8);
 
// Устанавливаем необходимые поля
$fields = array(
  'name' => 'user_name',
  'mail' => 'user_name@example.com',
  'pass' => $password,
  'status' => 1,
  'init' => 'email address',
  'roles' => array(
    DRUPAL_AUTHENTICATED_RID => 'authenticated user',
  ),
);
 
// Создаем учетную запись
$account = user_save('', $fields);
 
$account->password = $fields['pass'];
 
// И напоследок шлем письмо пользователю
drupal_mail('user', 'register_no_approval_required', $email, NULL, array('account' => $account), variable_get('site_mail', 'noreply@example..com'));
?>

Код работает, но
1) если пользователь с указанным мылом уже есть, вылетает ошибка
2) как сгенерировать логин (username)?
3) что значит "генерируем случайный пароль"?

Аватар пользователя Andruxa Andruxa 24 июля 2013 в 23:09

"q2_faith" wrote:
а если пользователь ошибься

а если не ошибся: залил кучу зоо-некро-педофилии под чужой учёткой?

Аватар пользователя shevgeny shevgeny 25 июля 2013 в 16:23

q2_faith wrote:
"Andruxa" wrote:
а если не ошибся: залил кучу зоо-некро-педофилии под чужой учёткой?

угу)

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

Аватар пользователя sas@drupal.org sas@drupal.org 25 июля 2013 в 16:40

- email_registration - зарегить по мылу.
- logintoboggan справится с регистрацией на 3 дня пока не пришло подтверждение учётки и выдаст промежуточную роль, не подтвердил - удалит.
- genpass справится с генерацией пароля.

Аватар пользователя shevgeny shevgeny 27 июля 2013 в 20:17

<a href="mailto:sas@drupal.org">sas@drupal.org</a> wrote:
- email_registration - зарегить по мылу.
- logintoboggan справится с регистрацией на 3 дня пока не пришло подтверждение учётки и выдаст промежуточную роль, не подтвердил - удалит.
- genpass справится с генерацией пароля.

Спасибо, по делу. С механизмом сейчас разбираюсь. Как разберусь, отпишусь.

Аватар пользователя q2_faith q2_faith 25 июля 2013 в 17:03

"shevgeny" wrote:
Я тоже об этом думал, но пока не могу ничего сообразить. Видимо, придется от такой затеи избавиться.

инлайновая проверка почты, например кодом

Аватар пользователя shevgeny shevgeny 27 июля 2013 в 20:24

q2_faith wrote:
"shevgeny" wrote:
Я тоже об этом думал, но пока не могу ничего сообразить. Видимо, придется от такой затеи избавиться.

инлайновая проверка почты, например кодом

Кстати, хорошая мысль. А если запрашивать подтверждение не по email, а по SMS? Хм... надо бы подумать...

Аватар пользователя denserdv denserdv 29 января 2014 в 2:07

"shevgeny" wrote:


<?php// Генерируем случайный пароль на 8 символов
$password = user_password(8);
?>


- еще же нужно перед сохранением в базу преобразовать пароль в хеш друпальский:

<?php
require_once DRUPAL_ROOT '/includes/password.inc';
$password user_hash_password($password);
?>