Добавить пользовательское промежуточное ПО для конечных точек Laravel Passport

У меня стандартная настройка Laravel Passport на 5.4 — все работает нормально и генерирует токены.

Я защищаю свои маршруты API с помощью промежуточного программного обеспечения auth: api, а также специального промежуточного программного обеспечения, которое проверяет наличие и действительность определенных заголовков в запросе перед обработкой любых запросов. Это промежуточное ПО отлично работает для группы маршрутов API.

Есть ли способ обернуть маршруты Passport, сгенерированные laravel ‘… / oauth / token’, также в это промежуточное ПО?

В настоящее время я настроил маршруты в моем методе boot () AuthServiceProvider.php:

public function boot()
{
$this->registerPolicies();

// Passport/OAuth
Passport::routes(function ($router) {
$router->forAccessTokens();
$router->forTransientTokens();
});

Passport::tokensExpireIn(Carbon::now()->addDays(7));

Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
}

Конечная цель состоит в том, чтобы конечные точки oauth возвращали ошибку, если заголовки отсутствуют.

6

Решение

Если вам нужно добавить промежуточное ПО, например, к одному маршруту Passport /oauth/token, вы можете сделать это следующим образом:

  1. Найдите нужный маршрут, набрав php artisan r:l
  2. Проверьте контроллер и метод, используемый для этого маршрута, в нашем примере это будет AccessTokenController@issueToken
  3. Создайте контроллер, который расширяет AccessTokenController, вы можете оставить его пустым
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Laravel\Passport\Http\Controllers\AccessTokenController;

class ApiTokenController extends AccessTokenController
{

}
  1. Затем создайте маршрут к этому контроллеру и методу (так как этот контроллер наследует все методы родительского контроллера):

Route::middleware('MyMiddleware')->post('/api-token', 'ApiTokenController@issueToken');

1

Другие решения

в app/Providers/AuthServiceProvider включите фасад Route, добавив этот оператор использования где-то сверху:

use Illuminate\Support\Facades\Route;

Тогда на boot() метод, поместите Passport :: routs () внутри Route :: group () следующим образом:

Route::group(['middleware'=>'MyFunkyCustomMiddleware'], function(){
Passport::routes(); // <-- Replace this with your own version
});

Надеюсь, это поможет!

3

Вы можете попробовать это

Passport::routes(null, ['middleware' => 'api']);
2
По вопросам рекламы [email protected]