Я собираюсь ответить на этот вопрос для дальнейшего использования, потому что третий ответ выше неправильный, и первый ответ будет работать, но не нужен (он повторяет опыт пользователя, отправляющего форму входа, вызывая все валидаторы и т. Д., И по-видимому, вы уже сделали эту проверку, или вы не будете пытаться войти в систему напрямую.
Это будет работать как положено, при условии, что у вас есть $username
и $password
из вашей собственной формы или функции, и вы знаете, что пользователь не вошел в систему:
if ($uid = user_authenticate($username, $password)) {
global $user;
$user = user_load($uid);
$login_array = array ('name' => $username);
user_login_finalize($login_array);
}
Сначала вы подтвердите имя пользователя и пароль, которые у вас есть. Если вы вернули ненулевой UID, аутентификация прошла успешно. Вы создаете массив, который предоставляет один, возможно, необходимый фрагмент информации, который был в исходной форме входа в систему, и передаете его в user_login_finalize()
, который делает все остальное (не только восстановление сеанса, но и запись вход в систему правильно и вызов входа в систему).