如何以编程方式发送忘记密码电子邮件?


9

我在一个项目中实现了Decoupled Drupal,我需要实现的forget password功能之一就是功能。因此,我创建了一个自定义路由来侦听请求的重置密码。

我知道我可以使用创建一个重置密码URL user_pass_reset_url()。我可以生成此链接并以编程方式将电子邮件设置给该用户,但是我正在寻找一种服务或Drupal核心功能来完成这项工作。

如何以编程方式发送重设密码的电子邮件?


以编程方式发送重置密码电子邮件的方法是,创建一个模块来更改URL的主机和路径,以便使其链接到您的应用,然后提供一个端点来处理摄取用户传递的重置URL部分。没有核心功能。在Drupal 7中,我发现在访问/ user页面后将用户从后端站点重定向到前端应用程序更容易
mradcliffe

Answers:


11

通过对核心用户模块进行一些逆向工程,解决方案是:

    $name = \Drupal::request()->get("name");
    $langcode =  \Drupal::languageManager()->getCurrentLanguage()->getId();
    // Try to load by email.
    $users = \Drupal::entityTypeManager()->getStorage('user')->loadByProperties(array('mail' => $name));
    if (empty($users)) {
        // No success, try to load by name.
        $users = \Drupal::entityTypeManager()->getStorage('user')->loadByProperties(array('name' => $name));
    }
    $account = reset($users);
    // Mail one time login URL and instructions using current language.
    $mail = _user_mail_notify('password_reset', $account, $langcode);

谢谢@Yusef,例如。我创造了这个模块为自项目:github.com/ivan-berezhnov/drupal-8-recipes/tree/master/...
伊万Berezhnov
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.