Как сохранить время последнего входа пользователя и IP-адрес
Доброго времени суток. В одном из проектов мне необходимо было вести лог активности пользователя. Логирование практически любого действия (время, ip адрес и само действие). В этом нет ничего сложного. Давайте я расскажу, как это сделать и немного упростим задачу. Будем ввести лог только для аутентификации (записывать дату и ip адрес). И все это дело будем писать в стандартный лог файл.
Как устанавливать Laravel я не буду рассказывать, это можно прочитать в официальной документации или кто не очень дружит с английским языком можно прочитать в переведенной документации. Теперь давайте сделаем первоначальные настройки.
Настройка проекта на Laravel
Мы настроим подключение к базе данных и логирование. Для этого откроем файл .env, который расположен в корне нашего проекта и изменим настройки. (База данных у меня называется lara, логин – homestead, пароль – secret)
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=lara DB_USERNAME=homestead DB_PASSWORD=secret
Теперь настроим логирование так, чтобы логи писались по дням: laravel-<дата формирования лога>.log
LOG_CHANNEL= daily
Отлично. На этом настройка завершена. Теперь переходим к созданию аутентификации в нашем приложении.
Аутентификация в Laravel
Тут вообще проще простого. Laravel из коробки поддерживает аутентификацию. Нам необходимо ввести две команды:
php artisan make:auth
И вторая команда:
php artisan migrate
Первая команда создает контроллеры аутентификации, регистрации, сброса пароля и напоминание пароля, виды и роуты. А вторая выполняет миграцию, при выполнении которой буду созданы две таблицы (в одной хранятся email, пароли и др. данные о пользователя, а вторая необходима для хранения данных при восстановлении пароля).
Теперь если мы перейдем на наш сайт, то увидим ссылки: на страницу авторизации и на страницу регистрации.
Давайте пройдем регистрацию, а потом авторизацию.
Регистрация и авторизация в Laravel
Проходим по ссылке Register и вводим все необходимые данные. И при успешной регистрации нас сразу перенаправит на защищенную страницу
Отлично. Теперь давайте разлогинемся и снова залогинемся. Все работает.
Вот мы и подошли к самому интересному.
Запись даты и ip адрес в лог при авторизации.
В AuthenticatesUsers есть метод authenticated(Request $request, $user), который выполняется, когда пользователь проходит аутентификацию. Поэтому в своем контроллере Auth\LoginController мы можем переопределить его, добавив код в конец нашего контроллера
public function authenticated(Request $request) { Log::info('Пользователь прошел авторизацию '.Carbon::now()->toDateString().' с ip адреса: '.$request->getClientIp()); }
И не забываем прописать:
use Illuminate\Support\Facades\Log; use Carbon\Carbon; use Illuminate\Http\Request;
Тут мы использовали фасад Log для записи данных в файл логов. Для работы с датой мы использовали Carbon. Как работать с датой и временем с помощью carbon вы можете прочитать в статье «Работа с датой и временем в Laravel и PHP с помощью Carbon».
Давайте проверим, что у нас получилось. Залогинимся в нашем приложении и посмотрим лог, который находится в storage\logs
И в самом логе будет следующее:
Как видите все работает.
Заключение.
Мы с вами сделали логирование при авторизации пользователя. Правда записываем дату и ip адрес в файл, что не очень правильно (хотя… смотря для чего).
День добрый. А как вести лог тех кто не прошел авторизацию?
Добрый день. Переопределить метод login. А вообще правильней создать событие и слушателя. И вызывать это событие при ошибке авторизации.