Laravel - 上次登录日期和时间时间戳

时间:2014-03-17 16:36:34

标签: php laravel laravel-4

我知道有自动插入的字段(例如 updated_at created_at )但我想知道是否有类似Eloquent方法 timestamp()或Laravel生成时间戳的方法?

例如,我想每次用户登录系统时记录时间戳并将其存储到数据库中,这样我们就可以看到每个用户的上次登录日期和时间细节。

4 个答案:

答案 0 :(得分:69)

在Laravel 5.2+(也在5.6上测试)过程略有不同。首先,将您的监听器添加到EventServiceProvider:

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

然后做:

php artisan event:generate

这将在app / Listeners中创建一个新的监听器。现在编辑您的监听器以触摸users表中last_login列中的日期:

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

确保Artisan创建的监听器在顶部具有正确的命名空间。对于这种特殊情况,监听器中的正确名称空间应为:

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

答案 1 :(得分:28)

您可能会观察auth.login事件并更新用户的上次登录时间。请参阅documentation中的第一个示例,了解事件的确切内容。

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

    $user->save();
});

注意:在4.0中,事件名称为user.login。在4.1中,事件名称为auth.login

更新

这取决于你放置事件监听器的位置。如果您阅读链接到doc页面,它会声明:

  

所以,你知道如何注册事件,但你可能想知道在哪里   注册他们。别担心,这是一个常见的问题。不幸,   这是一个很难回答的问题,因为你可以注册一个活动   差不多到了!但是,这里有一些提示。再次,像大多数其他   引导代码,您可以在其中一个启动文件中注册事件   例如app / start / global.php。

     

如果你的起始文件过于拥挤,你可以创建一个   单独的app / events.php文件包含在起始文件中。这个   是一个简单的解决方案,可以保持您的事件注册干净   与其余的引导分开。如果你喜欢上课   基于方法,您可以在服务提供商中注册您的活动。   由于这些方法中没有一个本质上是“正确的”,所以选择一个   根据你的大小,让你觉得舒服   应用

我个人的偏好是在服务提供商中注册它们,因为这样可以使它们隔离,对我来说就是更“Laravel”的做事方式。如果您需要有关服务提供商的帮助,请参阅this文档条目。

但是,如果您真的只想尽快获得并运行,那么在app/start/global.php

内注册该监听器就会很容易

答案 2 :(得分:12)

我有一个类似的问题。如果您觉得不需要使用事件,则可以在对用户进行身份验证后更新时间戳。我将以下代码放在我的处理用户身份验证的控制器方法中。

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');
}

这对我有用。

答案 3 :(得分:10)

只需将以下代码添加到App \ Http \ Controllers \ Auth \ LoginController.php

在控制器的顶部:

use Carbon\Carbon;
use Illuminate\Http\Request;

在控制器内部放置此功能:

public function authenticated(Request $request, $user) {
    $user->last_login = Carbon::now()->toDateTimeString();
    $user->save();
}