Как зарегистрировать попытку аутентификации с использованием Laravel Passport (5.3)

У нас есть веб-приложение, использующее серверную часть REST API Laravel через клиентскую часть Ang 1.6.5.

Я смотрю в журнале 3 разных результата запроса аутентификации: 1. Успешная аутентификация. 2. Действительная учетная запись пользователя, неверный пароль. 3. Неверная учетная запись пользователя.

Я не могу понять, как подключиться к процессу аутентификации Passport.

Я попытался с каким-то пользовательским Middleware, также провайдером. Ни одна из них не сработала, хотя это могла быть реализация.

Какой правильный подход здесь?

Благодарю.

3 ответа

Я провожу свой вечер, пытаясь понять, как это сделать в Laravel 6.

  1. Я создаю промежуточное ПО под названием 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);
    }
}
  1. Зарегистрировали его на Http\Kernel
protected $routeMiddleware = [
     'access_log' => \App\Http\Middleware\AccessLogMiddleware::class,
     ....
]
  1. Примените промежуточное ПО к Passport::routes(), в моем случае это в AuthServiceProvider:
Passport::routes(null, ['middleware' => 'access_log']);

Все готово!

Не переписывая исходный текст поставщика, вы можете посмотреть на промежуточное ПО, а затем просто поймать его до того, как оно вернется. Это не самое элегантное решение, но этого может быть достаточно.

Извините, это не полное решение, у меня недостаточно очков, чтобы оставить комментарий.

Не знаю, актуально ли это, но Passport генерирует событие с именем AccessTokenCreated, так что вы можете прослушать его с помощью EventListener.

Другие вопросы по тегам