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