Laravel 5.2 - 事件处理 - 通过记住我记录用户登录

时间:2016-05-30 14:12:35

标签: events laravel-5.2

我正在使用默认的laravel 5.2授权库。

我正在使用24小时超时记住我的功能。

每次用户访问webste后,我都需要在审计表中记录带有IP地址的user_id。

我使用EventServiceProvider完成此操作,侦听登录事件  然后使用请求对象来标识IP并持久保存到数据库。

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

这适用于登录屏幕与用户提供的用户名和密码一起使用的所有登录。

但是,如果用户通过会话cookie访问网站(即在上次登录后的24小时内登录),则不会记录登录。因此,它必须遵循授权库中的不同路径。

在API文档(https://laravel.com/api/5.2/Illuminate/Auth/Events.html)中没有类似例如' LogInViaCookie'

的事件。

我尝试过向AuthController添加方法 -

/**
 * Add audit.
 *
 * @param  $request
 * @param  $user
 */
protected function authenticated(Request $request, $user)
{
    try
    {
        $audit = Audit::create(['internet_protocol' => $request->ip,
                'uid' => $user->id,
                'general' => 'viaCookie']);
        $audit->save();
    }catch(\Exception $e){
        Log::error($e->getMessage());
    }
}

根据我的理解,这个经过身份验证的方法应该从AuthenticatesUsers特征中触发(第115行) -

    if (method_exists($this, 'authenticated')) {
        return $this->authenticated($request, Auth::guard($this->getGuard())->user());
    }

但是,通过cookie登录时,似乎不会触发此方法。

我如何倾听和捕捉这种类型的LogInViaCookie'事件来更新我的审计表?

更新30/05/16 21:21 Rifki-这听起来像是一个很好的解决方案。我尝试过实施,但我无法让它发挥作用。

这是我的viaCookie.php -

namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;

class viaCookie
{
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
public function handle($request, Closure $next)
{
if(Auth::viaRemember()) {
    dd('logged in via cookie');
}
    return $next($request);
}
}

我的Kernel.php更新 -

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \App\Http\Middleware\viaCookie::class,
    ],

我错过了什么吗? dd没有被解雇。

0 个答案:

没有答案