Вы здесь

Как автоматически присваивать для новых пользователей имена по шаблону?

0

Каким образом можно автоматически присваивать для новых пользователей сайта имена по шаблону:
uXXXXXXX
u-постоянный идентификатор пользователя
XXXXXXX - семизначное число от 1 до 9999999, которое выбирается рандомным генератором чисел при создании профиля. Главное, чтобы число было уникальным.
Нашёл модуль Automatic User Names
Тут можно самостоятельно задать шаблон имени через токены. Например, u[user:uid].
Тогда у первого юзера будет логин u1, у второго u2, у 20ого - u20.
Минус такого метода в том, что при регистрации будет легко понять общее кол-во зарегистрированных пользователей. Что является сливанием инфы. Этого бы хотелось избежать рандомным выбором числа от 1 до 9999999 и проверкой уникальности выбранного имени.

Может ли кто-то дать совет как решить вопрос?

Версия Drupal: 
7.x
Категория: 
User API
Вопрос задан 12.11.2016 - 07:44

Ответы

0

На ум сразу приходит мысль - реализовать свой токен для такой задачи и далее воспользоваться модулем, который Вы указали. Кода для написания своего токена несложный.
http://drupal-learning.com/blog/sozdanie-polzovatelskih-tokenov-s-pomosh...
http://drupalace.ru/lesson/sozdanie-svoih-tokenov-na-primere-registracii...

Можно также поэкспериментировать с hook_user_insert, возможно, это будет даже правильнее, чем первый способ.

Само число формируется с помощью генератора случайных чисел, только после этого нужно проверять, что пользователь с таким числом еще не генерировался.

Ответ дан 12.11.2016 - 08:46

Как раз как-то стояла подобная задача, вот кусок кода генерации имен.

do {
      $name = rand(2, 9999999);
      $count = db_select('users')
        ->condition('name', 'u' . $name)
        ->countQuery()
        ->execute()
        ->fetchField();
    } while ($count != 0);

    // Далее создаем пользователя.
   $new_user = array(
      'name' => $name,
      'mail' => $mail,
      'pass' => $pass,
      'status' => 1,
      'init' => $mail,
      'roles' => array(
        DRUPAL_AUTHENTICATED_RID => 'authenticated user',
      ),
    );

    $save_user = user_save('', $new_user);
    $save_user->password = $pass;
Комментарий оставлен 15.11.2016 - 21:46
0

Насколько я помню, есть же токен [random:number], хотя вероятны коллизии. По-хорошему, нужно писать свой токен типа sha1 от uid.

Ответ дан 12.11.2016 - 10:25

К слову, есть же токен timestamp — [user:created:raw] в виде 1294923183. Можно его объединить с random и вероятность коллизий крайне маловероятной.

Комментарий оставлен 12.11.2016 - 15:09