Как зарегистрировать попытку аутентификации с использованием Laravel Passport (5.3)
У нас есть веб-приложение, использующее серверную часть REST API Laravel через клиентскую часть Ang 1.6.5.
Я смотрю в журнале 3 разных результата запроса аутентификации: 1. Успешная аутентификация. 2. Действительная учетная запись пользователя, неверный пароль. 3. Неверная учетная запись пользователя.
Я не могу понять, как подключиться к процессу аутентификации Passport.
Я попытался с каким-то пользовательским Middleware, также провайдером. Ни одна из них не сработала, хотя это могла быть реализация.
Какой правильный подход здесь?
Благодарю.
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']);
Все готово!
Не переписывая исходный текст поставщика, вы можете посмотреть на промежуточное ПО, а затем просто поймать его до того, как оно вернется. Это не самое элегантное решение, но этого может быть достаточно.
Извините, это не полное решение, у меня недостаточно очков, чтобы оставить комментарий.
Не знаю, актуально ли это, но Passport генерирует событие с именем AccessTokenCreated, так что вы можете прослушать его с помощью EventListener.