hook_user_loginには、ユーザーが初めてログインしたかどうかを確認する方法がありますか?


7

ログイン時にユーザーを特定のページにリダイレクトするようにhook_user_loginをオーバーライドしています。問題は、登録時に確認メール設定を使用しているため、ユーザーが最初のログイン時にパスワードを設定する必要がありますが、一部のユーザーがリダイレクトされるようにリダイレクトします2回目にサイトにログインできません。

ユーザーがサイトに初めてログインしたかどうかを通知する、hook_user_loginで確認できるものはありますか?

回答:


6

次のコードを使用して、テストサイトでテストを行いました。

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

次に、テストユーザーを作成し、そのアカウントでログインしました。私が書いたコードは、次のメッセージを出力します。

ユーザー名:test、ユーザーアクセス:0、ユーザーログイン:1340038458

$account->loginhook_user_login()が呼び出されたときに、ユーザーはすでにログインしているため使用できません。ユーザーがすでにログインしているかどうかを確認する唯一の方法は、を確認すること$account->accessです。

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

私はif($ account-> access> 0)を使用しました{ifステートメントが機能しないようでした
SomethingOn

それのほうがいい; $account->accessタイムスタンプであるため、負になることはありません。PHP_INT_MAXただし、その値がより大きい場合、その値はPHPからマイナスと見なされます。(PHPの整数は符号付きでありPHP_INT_MAX、それらが持つことができる最大の正の値です。)
kiamlaluno


6

$ accountのアクセスプロパティを確認します。これは、ユーザーが以前にログインした回です。

初めてログインする場合は、有効なタイムスタンプ以外である必要があります。

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

0

これはあなたの質問には答えませんが、私があなたのシナリオを理解していれば、これは役立ちます:ユーザーが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');
        }
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.