2017-02-26 20 views
3

我试图在用户成功登录时更新最后一个登录列,我试图将下面的代码放在LoginController中,但它没有工作,我也试过了一个监听器,跟在this answer之后,没有任何事情发生,似乎听众没有被执行。如何在用户使用Laravel成功登录时更新最后一次登录列?

 DB::table('users') 
       ->where('id', Auth::id()) 
       ->update(['lastlogin' => Carbon::now()]); 

我的laravel版本是5.4.12。我怎样才能使它工作?

回答

9

您可以订阅Login事件,该事件在用户成功通过身份验证后触发。

app/providers/EventServiceProvider.php中,将事件和侦听器添加到$listen阵列。

protected $listen = [ 
    // ... 
    \Illuminate\Auth\Events\Login::class => [ 
     \App\Listeners\LastLogin::class, 
    ], 
    // ... 
]; 

app/listeners/LastLogin.php

namespace App\Listeners; 

use App\Models\User; 
use Carbon\Carbon; 
use Illuminate\Auth\Events\Login; 

class LastLogin 
{ 
    /** 
    * Handle the event. 
    * 
    * @param \Illuminate\Auth\Events\Login $event 
    * @return void 
    */ 
    public function handle(Login $event) 
    { 
     // Update user last login date/time 
     $event->user->update(['lastlogin' => Carbon::now()]); 
    } 
} 
+0

创建一个新的事件监听器这正是我是如何解决它。我还添加了一个login_count以这种方式检查用户活动: $ event-> user-> login_count = $ event-> user-> login_count + 1; – Dom

+1

是的,如果你想增加一个登录计数器,我会使用以下内容来保持事情的美好和紧密。 '$ event-> user-> increment('login_count') - > update(['lastlogin'=> Carbon :: now()]);' – fubar

+0

谢谢,它工作得很好,唯一不同的是(''id',$ event-> user-> id) - > update(['lastlogin'=> Carbon ::现在()]);',出于某种奇怪的原因,你使用的方式对我不起作用。 – Antonio

相关问题