我正在使用默认的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没有被解雇 .