【问题标题】:How do I track authentication in Laravel using satellizer如何使用 satellizer 在 Laravel 中跟踪身份验证
【发布时间】:2016-12-31 14:12:24
【问题描述】:

我想计算用户使用 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() 方法永远不会被调用。

我可以看到正在调用构造函数但不是句柄函数,我在这里缺少什么,还有其他方法可以实现这样的事情吗!

谢谢

【问题讨论】:

    标签: php laravel authentication satellizer


    【解决方案1】:

    我确实将 authentication() 函数更改为此并且它正在工作:

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

    现在计数器正在工作,所以我可以跟踪用户登录,你认为伙计们,这是某种解决方案吗?对我来说似乎工作正常,为什么我们可以做到这么简单,但我们还要使用事件?

    我想知道是否有人对此有更好的解决方案

    【讨论】:

      猜你喜欢
      • 2016-10-10
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 2010-11-02
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多