Como enviar um e-mail de senha esquecido programaticamente?

9

Eu implementei o Drupal desacoplado em um dos meus projetos, um dos recursos que preciso implementar é um forget passwordrecurso. Então, criei uma rota personalizada para ouvir a redefinição da senha solicitada.

Eu sei que posso criar um URL de redefinição de senha com user_pass_reset_url(); Posso gerar esse link e definir programaticamente o email para esse usuário, mas estou procurando um serviço ou a funcionalidade principal do Drupal para realizar esse trabalho.

Como enviar programaticamente um email de redefinição de senha?

Yusef
fonte
A maneira de enviar um e-mail de senha de redefinição programaticamente é criar um módulo para alterar o host e o caminho da URL para que ele seja vinculado ao seu aplicativo e, em seguida, fornecer um ponto de extremidade para lidar com a ingestão de partes da URL de redefinição de senha do usuário. Não há funcionalidade principal para isso. No Drupal 7, achei mais fácil para redirecionar o usuário a partir do site back-end para o aplicativo front-end depois de visitar a página / usuário
mradcliffe

Respostas:

11

Com alguma engenharia reversa no módulo principal do usuário, a solução é:

    $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
fonte
Obrigado @Yusef por exemplo. Criei este módulo para o projeto próprio: github.com/ivan-berezhnov/drupal-8-recipes/tree/master/…
Ivan Berezhnov