Drupal 8 - 如何以编程方式创建用户帐户并稍后验证电子邮件地址

时间:2018-01-04 19:53:44

标签: php drupal-8 access-denied

我开发了一个自定义模块来使用业务规则模块创建用户。这很有效。

$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);

当用户点击他获得的链接时,访问被拒绝"错误。

我需要在用户创建代码中更改哪些内容?

2 个答案:

答案 0 :(得分:0)

您必须从管理员配置启用register_no_approval_required设置。你必须从代码激活用户。

$user->activate();

有关详细信息,请查看link

答案 1 :(得分:0)

Drupal以一种奇怪的方式工作:"活跃"用户帐户并不意味着它已验证了电子邮件地址。电子邮件验证实际上是一种登录和设置密码的方法。如果电子邮件地址不是"有效"您无法登录,即使该帐户处于活动状态",因为您没有收到一次性登录链接。

因此,如果您以编程方式创建用户帐户,也应该激活它们。

如果用户被阻止并且他点击了电子邮件链接,则他不会变为活动状态。他得到了拒绝访问权限#34;错误。