Я разработал пользовательский модуль для создания пользователей, используя модуль бизнес-правил. Это хорошо работает.
$lang = \Drupal::languageManager()->getCurrentLanguage()->getId();
$user = \Drupal\user\Entity\User::create();
// The Basics
$user->setUsername(str_replace('@','',$mail));
$user->setPassword(user_password());
$user->setEmail($mail);
$user->enforceIsNew();
$user->set("init", $mail);
$user->set("langcode", $lang);
$user->set("preferred_langcode", $lang);
$user->set("preferred_admin_langcode", $lang);
$result = $user->save();
После этого я отправляю электронное письмо пользователю со ссылкой для отдыха пользователя. _user_mail_notify('register_no_approval_required', $user);
Когда пользователь нажимает на ссылку, он получает сообщение об ошибке «Отказано в доступе».
Что я должен изменить в коде создания пользователя?
Вы должны включить параметр register_no_approval_required из конфигурации администратора. и вы должны активировать пользователя из кода.
$user->activate();
Для более подробной информации посмотрите на ссылка на сайт
Drupal работает странным образом: «активная» учетная запись пользователя не означает, что адрес электронной почты подтвержден. Проверка электронной почты на самом деле является способом входа и установки пароля. Если адрес электронной почты не является «действительным», вы не сможете войти, даже если учетная запись «активна», поскольку вы не получили ссылку для одноразового входа.
Поэтому, если вы программно создаете учетные записи пользователей, вы должны также активировать их.
Если пользователь заблокирован, и он нажимает на ссылку электронной почты, он не становится активным. Он получает сообщение об ошибке «Отказано в доступе».