【问题标题】:Drupal 8 - how to create a user account programmatically and validating the email address laterDrupal 8 - 如何以编程方式创建用户帐户并稍后验证电子邮件地址
【发布时间】:2018-01-04 19:53:43
【问题描述】:

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

$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); 向用户发送电子邮件

当用户点击链接时,他会收到“拒绝访问”错误。

我必须在用户创建代码中进行哪些更改?

【问题讨论】:

  • 链接是如何创建的?您是否为此定义了路由器?
  • 路由器?我不明白。

标签: php drupal-8 access-denied


【解决方案1】:

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

$user->activate();

更多详情请查看link

【讨论】:

  • 我确实启用了 register_no_approval_required,但是当我使用 $user->activate() 时,这会立即激活用户,这是我不想要的,因为用户必须先验证他的电子邮件地址。
  • 那你为什么要发送 register_no_approval_required 的邮件。并且还必须激活用户才能访问用户链接。如果用户被禁用,则用户网址将不起作用。
  • 在标准注册过程中,用户也被标记为“被阻止”,直到用户验证他的电子邮件地址。
  • 我的意思是,您不需要向用户发送 _no_approval_required 邮件。并检查 drupal admin 中的电子邮件验证设置。 more details
  • 我不确定,如果我理解的话。该模块不是用于管理目的,而是用于普通用户,因此必须验证电子邮件地址。
【解决方案2】:

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

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

如果用户被阻止并且他点击了电子邮件链接,他就不会变得活跃。他得到一个“拒绝访问”错误。

【讨论】:

    猜你喜欢
    • 2012-09-09
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 2012-03-27
    • 2012-07-14
    • 2014-11-15
    • 1970-01-01
    • 2017-05-01
    相关资源
    最近更新 更多