Gibt es in hook_user_login eine Möglichkeit festzustellen, ob sich der Benutzer zum ersten Mal angemeldet hat?

7

Ich überschreibe hook_user_login, um Benutzer bei der Anmeldung auf eine bestimmte Seite umzuleiten. Das Problem besteht darin, dass ich bei der Registrierung die Einstellung für die Bestätigungs-E-Mail verwende, bei der der Benutzer bei der ersten Anmeldung sein Kennwort festlegen muss, diese jedoch umleiten, damit einige Benutzer nicht weitergeleitet werden Ich kann mich nicht zum zweiten Mal auf der Website anmelden.

Kann ich in hook_user_login etwas überprüfen, das mir sagt, ob sich der Benutzer zum ersten Mal auf der Site angemeldet hat?

Etwas auf
quelle

Antworten:

6

Ich habe auf meiner Testseite einen Test mit dem folgenden Code durchgeführt.

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

Ich habe dann einen Testbenutzer erstellt und mich mit diesem Konto angemeldet. Der Code, den ich geschrieben habe, gibt die folgende Meldung aus:

Benutzername: Test, Benutzerzugriff: 0, Benutzeranmeldung: 1340038458

$account->loginkann nicht verwendet werden, da der Benutzer bereits angemeldet ist, wenn er hook_user_login()aufgerufen wird. Die einzige Möglichkeit, festzustellen, ob der Benutzer bereits angemeldet ist, besteht in der Überprüfung $account->access.

function mymodule_user_login(&$edit, $account) {
  if ($account->access == 0) {
    // The user has never logged in before.
  }
}
kiamlaluno
quelle
Ich habe if ($ account-> access> 0) {verwendet, obwohl Ihre if-Anweisung nicht zu funktionieren schien
SomethingOn
Das ist besser; $account->accesssollte niemals negativ sein, da es sich um einen Zeitstempel handelt. Wenn sein Wert größer als ist PHP_INT_MAX, wird sein Wert von PHP jedoch als negativ angesehen. (Ganzzahlen in PHP sind signiert und stellen PHP_INT_MAXden maximalen positiven Wert dar, den sie haben können.)
kiamlaluno
Drupal 8 Version: drupal.stackexchange.com/a/223410/45409
oknate
6

Überprüfen Sie die Zugriffseigenschaft von $ account. Dies ist ein Zeitstempel, in dem sich der Benutzer zuvor angemeldet hat.

Es sollte sich nicht um einen gültigen Zeitstempel handeln, falls Sie sich zum ersten Mal anmelden.

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

Dies beantwortet Ihre Frage nicht, aber wenn ich Ihr Szenario verstehe, würde dies helfen: Führen Sie die Umleitung nicht durch, wenn sich der Benutzer auf der Seite pass_reset anmeldet

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

                drupal_goto('somewhere');
        }
    }
}
Commonpike
quelle