Das Token "user: one-time-login-url" wird nicht durch token_replace ersetzt

7

Ich versuche, E-Mails manuell über den Hook hook_mail_alter an Benutzer zu senden. Folgendes ist meine Funktion in ihrer Gesamtheit:

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

Die Ausgabe sieht folgendermaßen aus:

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

Wie Sie sehen können, werden Dinge wie [Benutzer: Name], [Site: Name] und [Site: Login-URL] ordnungsgemäß verarbeitet. Das einzige Token, das nicht verarbeitet wird, ist [Benutzer: Einmalige Anmelde-URL]. Irgendwelche Ideen, warum das passiert?

EDIT: Nur als Referenz, das Token nicht in den Begrüßungs - E-Mail verarbeitet bekommen , die vom System automatisch ausgesendet hat, so dass das Token - Modul aktiv ist und funktioniert ... Es scheint einfach nicht verarbeitet werden , wenn ich token_replace manuell aufrufe ().

Peter
quelle
Haben Sie das token.module aktiviert? Es sieht so aus, als ob das Token in token_token_info () und nicht in user_token_info () definiert ist.
Berdir
Ja, das Token-Modul ist aktiviert und ich verwende die neueste Beta7 ... Das ist ziemlich seltsam.
Peter

Antworten:

11

Um dieses Token zu ersetzen, müssen Sie token_replace()als aufrufen token_replace($email, array('user' => $_user), array('callback' => 'user_mail_tokens', 'sanitize' => FALSE)).

Die Funktion user_mail_tokens () wird in der Dokumentation wie folgt beschrieben:

Token-Rückruf zum Hinzufügen unsicherer Token für Benutzermails.

Diese Funktion wird vom Aufruf token_replace () am Ende von _user_mail_text () verwendet , um einige zusätzliche Token einzurichten, die in von user_mail () generierten E-Mail-Nachrichten verwendet werden können .

Der Code, mit _user_mail_text()dem dieser Rückruf aufgerufen wird, ist der folgende.

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

Das Token-Modul ist in Drupal 7 nicht erforderlich, um Token zu ersetzen. Der Code zum Ersetzen von Token ist Teil des Drupal 7-Kerncodes. Das Token-Modul in Drupal 7 definiert zusätzliche Token, die Drupal-Kernmodule nicht definieren.

kiamlaluno
quelle