Drupal 6 программно войти в систему пользователя - PullRequest
3 голосов
/ 16 февраля 2010

Я пытаюсь войти в систему как часть отправки формы, но почему не работает следующее:

$user = db_fetch_object(db_query("SELECT * FROM users WHERE mail = '%s' AND pass = '%s'", $mail, md5($pass)));

if ($user) {
    // Authenticate user and log in
    $params = array(
      'name' => $user->name,
      'pass' => trim($user->pass)
    );

    // Authenticate user    
    $account = user_authenticate($params);
}

если я дам дамп $ user, я смогу увидеть правильные значения, но если я выброшу аккаунт, он будет пуст.

1 Ответ

4 голосов
/ 20 февраля 2010

Вы передаете хешированный пароль в ´user_authenticate () ´, в то время как функция ожидает сброс пароля (она будет хэшироваться сама при загрузке учетной записи через ´user_load () ´ *) 1004 *).

Итак, изменив объявление массива $ params на

$params = array(
  'name' => $user->name,
  'pass' => $pass
);

должен заставить ваш пример работать.


Кстати, вы можете использовать user_load() самостоятельно, чтобы избежать непосредственного обращения к базе данных:

$user = user_load(array('mail' => $mail, 'pass' => trim($pass), 'status' => 1));

('status' => 1 ограничит результаты для активных пользователей - вы можете, конечно, не указывать это, если действительно хотите разрешить вход в систему для отключенных учетных записей;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...