2016-08-24 52 views
1

我想要统计用户在Laravel中使用事件登录的次数。如何使用卫星跟踪Laravel中的身份验证

我使用第三方库 'satellizer' 进行身份验证,我已经定义了一个AuthLoginEventHandler看起来如下:

<?php namespace App\Handlers\Events; 

use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Queue\ShouldBeQueued; 
use App\User; 
use Illuminate\Support\Facades\Log; 

class AuthLoginEventHandler { 

    /** 
    * Create the event handler. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     Log::info('Logged in User is working from constructor'); 
    } 

    /** 
    * Handle the event. 
    * 
    * @param User $user 
    * @param $remember 
    * @return void 
    */ 
    public function handle(User $user, $remember) 
    { 
     Log::info('Logged in'); 

     $user->login_counter = 1; 
     $user->save(); 
     $user->increment('login_counter'); 
    } 

} 

在AuthenticationController我:

public function authenticate(Request $request) 
{ 
    $credentials = $request->only('email', 'password'); 

    try { 
     // verify the credentials and create a token for the user 
     if (! $token = JWTAuth::attempt($credentials)) { 
      return response()->json(['error' => 'invalid_credentials','status'=>false], 401); 
     } 
    } catch (JWTException $e) { 
     // something went wrong 
     return response()->json(['error' => 'could_not_create_token','status'=>false], 500); 
    } 

    Log::info('Logged in User from JWT'); 
    Event::fire(new AuthLoginEventHandler()); 
    // if no errors are encountered we can return a JWT 
    return response()->json(compact('token')); 
} 

问题当我从AuthenticationController中的authenticate()函数触发事件时,handle()方法永远不会被调用。

我可以看到构造函数被调用,但没有处理函数,我在这里失踪,还有什么其他方式可以实现这样的事情!

感谢

回答

0

我也改变了身份验证()函数,这和它的工作:

public function authenticate(Request $request) 
{ 
    $credentials = $request->only('email', 'password'); 

    try { 
     // verify the credentials and create a token for the user 
     if (! $token = JWTAuth::attempt($credentials)) { 
      return response()->json(['error' => 'invalid_credentials','status'=>false], 401); 
     } 
    } catch (JWTException $e) { 
     // something went wrong 
     return response()->json(['error' => 'could_not_create_token','status'=>false], 500); 
    } 

    $user = Auth::user(); 
    $user->increment('login_counter'); 
    $user->update(); 

    // if no errors are encountered we can return a JWT 
    return response()->json(compact('token')); 
} 

而现在的计数器工作,这样我就可以跟踪用户登录时,你会想到什么家伙,这是一种解决方案吗?对我来说似乎工作正常,为什么我们使用事件时,我们可以做到这一点简单?

我想听听有没有人有更好的解决方案