Нужно чтобы если пользователь заходит через токен, сохраненный в бразере тоже отловить его вход.
Использую laravel passport и доступ к бэкэнду через api.
Чтобы отловить момент входа пользователя через пароль достаточно использовать штатное событие Laravel Passport и добавить код
'Laravel\Passport\Events\AccessTokenCreated' => [
'App\Listeners\onLogin,
],
...
а если токен у пользователя уже сохранен в браузере как это отловить?
Как вариант создал отдельный middleware и передал его в
Passport::routes(null, ['middleware' => 'access_log']);
в AuthServiceProvider
но ничего не вышло. не заходит в мой middlewar.
а в файле роутов создавать общую группу с этим мидл варом для api не представляется удобным.
может есть какой универсальный способ?
Мне нужно просто проверять пользователей которые успешно вошли по своему сохраненному в браузере токену и дальше делать то что надо..
Вот этот способ не помог. НЕ заходит в мидлваре:
3
Я провожу свой вечер, размышляя, как это сделать самому в Laravel 6.
Я создаю промежуточное программное обеспечение под названием AccessLogMiddleware
<?php
namespace App\Http\Middleware;
use App\AccessLog;
use App\User;
use Carbon\Carbon;
use Closure;
use Illuminate\Support\Facades\Hash;
class AccessLogMiddleware
{
public function handle($request, Closure $next)
{
if ($request->route()->getName() === 'passport.token'){ //this the route name of the API endpoint to get the token
$accessLog = new AccessLog([
'username' => $request->username,
'ip_address' => $request->getClientIp(),
'login_time' => Carbon::now(),
]);
$user = User::query()->where([
'username' => $request->username,
])->first();
if ($user) {
$accessLog->is_valid_username = 1;
if (Hash::check($request->password, $user->password)){
$accessLog->is_valid_password = 1;
}
};
$accessLog->save();
}
return $next($request);
}
}
Зарегистрировал его на Http\Kernel
protected $routeMiddleware = [
'access_log' => \App\Http\Middleware\AccessLogMiddleware::class,
....
]
Примените промежуточное программное обеспечение к Passport::routes(), в моем случае оно находится вAuthServiceProvider:
Passport::routes(null, ['middleware' => 'access_log']);
Все готово!