Người dùng của người dùng: Mã thông báo một lần đăng nhập url không được thay thế bởi mã thông báo


7

Tôi đang cố gắng gửi e-mail đến người dùng theo cách thủ công bằng cách sử dụng hook hook_mail_alter. Sau đây là toàn bộ chức năng của tôi:

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

Đầu ra trông như thế này:

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

Như bạn có thể thấy, những thứ như [user: name], [site: name] và [site: login-url] được xử lý đúng cách. Mã thông báo duy nhất không được xử lý là [người dùng: url đăng nhập một lần]. Có ý kiến ​​giải thích tại sao điều này lại xảy ra không?

EDIT: Chỉ để tham khảo, mã thông báo sẽ được xử lý trong các email Chào mừng được hệ thống gửi tự động, do đó mô-đun mã thông báo đang hoạt động hoạt động ... Nó dường như không được xử lý khi tôi gọi thủ công mã thông báo ().


Bạn đã bật token.module chưa? Có vẻ như mã thông báo đó được xác định trong token_token_info () chứ không phải trong user_token_info ().
Berdir

Có, mô-đun Token được bật và tôi đang sử dụng bản Beta7 mới nhất ... Điều này khá kỳ lạ.
Peter

Câu trả lời:


11

Để thay thế mã thông báo đó, bạn cần gọi token_replace()token_replace($email, array('user' => $_user), array('callback' => 'user_mail_tokens', 'sanitize' => FALSE)).

Hàm user_mail_tokens () được mô tả trong tài liệu dưới dạng:

Gọi lại mã thông báo để thêm mã thông báo không an toàn cho thư người dùng.

Hàm này được sử dụng bởi lệnh gọi token numplace () ở cuối _user_mail giác () để thiết lập một số mã thông báo bổ sung có thể được sử dụng trong các email được tạo bởi user_mail () .

Mã được sử dụng _user_mail_text()để gọi lại cuộc gọi đó là mã sau đây.

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

Mô-đun mã thông báo không cần thiết để thay thế mã thông báo, trong Drupal 7. Mã để thay thế mã thông báo là một phần của mã lõi 7 Drupal; mô-đun mã thông báo trong Drupal 7 xác định các mã thông báo bổ sung mà mô-đun lõi Drupal không xác định.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.