El token "user: one-time-login-url" no se reemplaza por token_replace


7

Estoy tratando de enviar correos electrónicos a los usuarios manualmente mediante el hook hook_mail_alter. La siguiente es mi función en su totalidad:

function custom_module_mail_alter(&$message) {
    $email = '[user:name],

A site administrator at [site:name] has created an account for you. You may now log in by clicking this link or copying and pasting it to your browser:

[user:one-time-login-url]

This link can only be used once to log in and will lead you to a page where you can set your password.

After setting your password, you will be able to log in at [site:login-url] in the future using:

username: [user:name]
password: Your password

--  [site:name] team';

    $account = $message['params']['account'];
    $uid = $account->uid;

    $_user = user_load($uid);

    dpm(token_replace($email, array('user'=>$_user)));
}

El resultado se ve así:

Peter,

A site administrator at Website has created an account for you. You may now log in by clicking this link or copying and pasting it to your browser:

[user:one-time-login-url]

This link can only be used once to log in and will lead you to a page where you can set your password.

After setting your password, you will be able to log in at http://localhost/website/user in the future using:

username: Peter
password: Your password

--  Website team

Como puede ver, cosas como [usuario: nombre], [sitio: nombre] y [sitio: login-url] se procesan correctamente. El único token que no se procesa es [usuario: one-time-login-url]. ¿Alguna idea de por qué está sucediendo esto?

EDIT: Sólo como referencia, el token no se procesan en los correos electrónicos de bienvenida que se envía a cabo por el sistema de forma automática, por lo que el módulo de token es activa y trabajando ... Simplemente no parece que se procesan cuando llamo manualmente token_replace ()


¿Tiene el token.module habilitado? Parece que ese token está definido en token_token_info () y no en user_token_info ().
Berdir el

Sí, el módulo Token está habilitado, y estoy usando la última Beta7 ... Esto es bastante extraño.
Peter

Respuestas:


11

Para reemplazar ese token, debe llamar token_replace()como token_replace($email, array('user' => $_user), array('callback' => 'user_mail_tokens', 'sanitize' => FALSE)).

La función user_mail_tokens () se describe en la documentación como:

Devolución de llamada de token para agregar tokens inseguros para los correos de los usuarios.

Esta función es utilizada por la llamada token_replace () al final de _user_mail_text () para configurar algunos tokens adicionales que pueden usarse en los mensajes de correo electrónico generados por user_mail () .

El código utilizado por _user_mail_text()para llamar a esa devolución de llamada es el siguiente.

// We do not sanitize the token replacement, since the output of this
// replacement is intended for an e-mail message, not a web browser.
return token_replace($text, $variables, array('language' => $language, 'callback' => 'user_mail_tokens', 'sanitize' => FALSE));

El módulo Token no es necesario para reemplazar tokens, en Drupal 7. El código para reemplazar tokens es parte del código central de Drupal 7; El módulo Token en Drupal 7 define tokens adicionales que los módulos principales de Drupal no definen.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.