Trong hook_user_login có cách nào để biết đây có phải là lần đầu tiên người dùng đăng nhập không?


7

Tôi đang ghi đè hook_user_login để chuyển hướng người dùng đến một trang cụ thể khi họ đăng nhập. Vấn đề là tôi đang sử dụng cài đặt email xác minh khi đăng ký yêu cầu người dùng đặt mật khẩu của họ khi đăng nhập lần đầu, nhưng tôi chuyển hướng họ để một số người dùng phát sinh Không thể đăng nhập lần thứ 2 vào trang web.

Có điều gì tôi có thể kiểm tra hook_user_login sẽ cho tôi biết nếu đây là lần đầu tiên người dùng đăng nhập vào trang web không?

Câu trả lời:


6

Tôi đã thực hiện một thử nghiệm trên trang web thử nghiệm của mình, sử dụng mã sau đây.

function code_testing_user_login(&$edit, $account) {
  watchdog('code_testing', 'User name: %name, user access: %access, user login: %login', array('%name' => $account->name, '%access' => $account->access, '%login' => $account->login), WATCHDOG_DEBUG);
}

Sau đó tôi đã tạo một người dùng thử nghiệm và đăng nhập bằng tài khoản đó. Mã tôi đã viết đầu ra thông báo sau:

Tên người dùng: kiểm tra, quyền truy cập người dùng: 0, đăng nhập người dùng: 1340038458

$account->loginkhông thể được sử dụng vì người dùng đã đăng nhập, khi hook_user_login()được gọi. Cách duy nhất để xem người dùng đã đăng nhập hay chưa là kiểm tra $account->access.

function mymodule_user_login(&$edit, $account) {
  if ($account->access == 0) {
    // The user has never logged in before.
  }
}

Tôi đã sử dụng if ($ account-> access> 0) {mặc dù câu lệnh if của bạn dường như không hoạt động
SomethingOn

Điều đó tốt hơn; $account->accesskhông bao giờ nên tiêu cực, vì nó là dấu thời gian. Tuy nhiên, nếu giá trị của nó lớn hơn PHP_INT_MAX, giá trị của nó sẽ bị coi là âm từ PHP. (Các số nguyên trong PHP đã được ký và PHP_INT_MAXlà giá trị dương tối đa mà chúng có thể có.)
kiamlaluno


6

Kiểm tra tài sản truy cập của tài khoản $. Đây là dấu thời gian mà người dùng đã đăng nhập trước đó.

Nó phải là một dấu thời gian hợp lệ trong trường hợp là lần đăng nhập đầu tiên.

function MODULE_user_login(&$edit, $account){
debug($account->access);
}

0

Điều này không trả lời câu hỏi của bạn, nhưng nếu tôi hiểu kịch bản của bạn, điều này sẽ giúp: không thực hiện chuyển hướng nếu người dùng đăng nhập trên trang pass_reset

function MYMODULE_user_login(&$edit, $account) {
    if (empty($_GET['destination'])) {
        if (!isset($_POST['form_id']) || $_POST['form_id'] != 'user_pass_reset') {

                drupal_goto('somewhere');
        }
    }
}
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.