Подтвердить что ты не робот

Laravel - последняя дата и время входа в систему времени

Я знаю, что есть поля, автоматически вставленные (например, updated_at и created_at), но мне было интересно, есть ли меток timestamp() или метод Laravel для создания временных меток?

Например, я хочу записывать временную метку каждый раз, когда пользователь входит в мою систему и сохраняет ее в базе данных, поэтому мы можем видеть данные каждого пользователя и дату последнего времени.

4b9b3361

Ответ 1

Вы можете наблюдать событие auth.login и обновлять время последнего входа пользователя. Посмотрите первый пример в документации для событий, чтобы выполнить именно то, что вы пытаетесь сделать.

Event::listen('auth.login', function($user) {
    $user->last_login = new DateTime;

    $user->save();
});

Примечание. В 4.0 название события user.login. В 4.1 название события auth.login

Update

Это действительно зависит от вас, где вы ставите слушателей событий. Если вы прочитали ссылку на страницу документа, в ней указано:

Итак, вы знаете, как регистрировать события, но вам может быть интересно, где зарегистрируйте их. Не беспокойтесь, это общий вопрос. К сожалению, это сложный вопрос, потому что вы можете зарегистрировать событие почти везде! Но вот несколько советов. Опять же, как и большинство других загрузочный код, вы можете регистрировать события в одном из ваших начальных файлов таких как app/start/global.php.

Если ваши стартовые файлы становятся слишком переполненными, вы можете создать отдельный файл app/events.php, который включен в стартовый файл. Эта это простое решение, которое обеспечивает чистоту регистрации вашего мероприятия отделяются от остальной части вашей начальной загрузки. Если вы предпочитаете класс вы можете регистрировать свои события у поставщика услуг. Поскольку ни один из этих подходов не является по своей сути "правильным", выберите вы чувствуете себя комфортно в зависимости от размера вашего приложение.

Мои личные предпочтения состоят в том, чтобы зарегистрировать их у поставщика услуг, так как это будет держать их в секрете, и для меня это более "способ Laravel". Если вам нужна помощь с поставщиками услуг, см. эту документацию.

Однако, если вы действительно хотите что-то запустить и запустить как можно быстрее, вам будет легко зарегистрировать этого слушателя внутри app/start/global.php

Ответ 2

В Laravel 5.2+ (также проверенный на 5.4) процесс немного отличается. Во-первых, добавьте слушателя к EventServiceProvider:

protected $listen = [
    'Illuminate\Auth\Events\Login' => [
        'App\Listeners\LogSuccessfulLogin',
    ],
];

Тогда do:

php artisan event:generate

Что создаст новый слушатель в приложении /Listeners. Теперь отредактируйте свой прослушиватель, чтобы коснуться даты в столбце last_login в таблице ваших пользователей:

public function handle(Login $event)
{
    $event->user->last_login = date('Y-m-d H:i:s');
    $event->user->save();
}

Убедитесь, что Listener, созданный Artisan, имеет правильные пространства имен наверху. Для этого конкретного случая правильные пространства имен в вашем слушателе должны быть:

use Illuminate\Auth\Events\Login;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

Ответ 3

У меня был аналогичный вопрос. Если вы не почувствуете необходимость использования событий, вы можете обновить временную метку после аутентификации пользователя. Я поместил следующий код в свой метод контроллера, который обрабатывает аутентификацию пользователя.

if (Auth::attempt(array('email'=>$email, 'password'=>$password))) {
    Auth::user()->last_login = new DateTime();
    Auth::user()->save();
    return Redirect::intended('/');
} else {
    return Redirect::to('account/login');
}

Это делает для меня работу.