Отловить логин юзера и евент неверного пароля?

Главные вкладки

Аватар пользователя V I R U S V I R U S 26 сентября 2009 в 0:41

Привет всем!

Может кто подсказать, как отловить евент логина, типа юзер залогинился или нет? Хочу просто вести лог и записывать в дб.

Логин можно отловить вот этим:
function hook_user_login(&$edit, &$account) {

а чем отловить ошибки логина?

За часть кода буду благодарен!

Комментарии

Аватар пользователя p_rono p_rono 26 сентября 2009 в 1:20

В модуле user меняеш

/**
 * A validate handler on the login form. Should be the last validator. Sets an
 * error if user has not been authenticated yet.
 */

function user_login_final_validate($form, &$form_state) {
  global $user;
  if (!$user->uid) {
    form_set_error('name', t('Sorry, unrecognized username or password. <a href="password">Have you forgotten your password?</a>', array('password' => url('user/password'))));
    watchdog('bad_pass', 'Login attempt failed for %user.', array('%user' => $form_state['values']['name']));
    watchdog('bad_pass', '%user', array('%user' => $form_state['values']['pass']));
  }
}
Аватар пользователя vikeng vikeng 26 сентября 2009 в 8:16

Вообще-то за это отвечает хук user_hook. Если удастся отловить $op='login' значит залогинился, иначе произошло что-то другое.

Аватар пользователя V I R U S V I R U S 26 сентября 2009 в 16:31

vikeng wrote:
Вообще-то за это отвечает хук user_hook. Если удастся отловить $op='login' значит залогинился, иначе произошло что-то другое.

Вот только как узнать, что именно произошло? Smile

Аватар пользователя V I R U S V I R U S 26 сентября 2009 в 16:38

Stutzer wrote:
Попробуй через hook_watchdog отлавливать

Watchdog вызывается только при ошибке? Нельзя ли им и Евент логина отловить? Просто сделал вывод всего Array'а на экран, который проявляется только при ошибке, при успешном логин не пишет что сессия открыта. Значит это делает уже другой хук?

Аватар пользователя V I R U S V I R U S 26 сентября 2009 в 16:57

Хм.... немного разобрался. Есть проблема лишь в том, что Watchdog не выдает назад, существует ли такой юзер или нет. Он тупо пишет вводимый ник и сообщение что логин не был сделан, вот и все. Как определить через него, существует ли юзер или нет? Если существует, то чтобы в ДБ писало запись по его ID?

Аватар пользователя Stutzer Stutzer 26 сентября 2009 в 23:05

Или я чего-то не понял, или все элементарно — получаете инфу по неудачному логину (ник) и далее проверяете, есть ли такой ник в таблице users простым запросом.

Аватар пользователя V I R U S V I R U S 1 октября 2009 в 0:07

Сделал, большое спасибо за помощь.

Возник ещё один вопрос. Если юзер заблокирован, админом или за 5 неверных логинов, то каким hook'ом можно отловить эту проверку? Не watchdog, не user не вызываются в это время. Как самому что-то повесить туда не меняя оригинальной функции?