首页 文章

将自定义中间件添加到Laravel Passport endpoints

提问于
浏览
6

我在5.4上有一个标准的Laravel Passport设置 - 它一切正常并且正在生成令牌 .

我使用auth:api中间件以及自定义中间件来保护我的API路由,该中间件在处理任何请求之前检查请求中的特定标头是否存在且有效 . 此中间件适用于API路由组 .

有没有办法将laravel'... / oauth / token'生成的Passport路由包装在这个中间件中?

目前我已经在我的AuthServiceProvider.php boot()方法中设置了路由:

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 endpoints 将返回错误 .

3 回答

  • 3

    app/Providers/AuthServiceProvider 中包含Route facade,通过在顶部的某处添加此use语句:

    use Illuminate\Support\Facades\Route;
    

    然后在 boot() 方法上,将Passport :: routes()放在Route :: group()中,如下所示:

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

    希望有所帮助!

  • 1

    你可以试试这个

    Passport::routes(null, ['middleware' => 'api']);
    
  • 1

    如果您只需要将中间件添加到一个Passport路由,例如 /oauth/token ,您可以这样做:

    • 输入 php artisan r:l 查找所需路线

    • 检查用于此路由的控制器和方法,例如,它将是 AccessTokenController@issueToken

    • 创建扩展AccessTokenController的控制器,可以将其留空

    namespace App \ Http \ Controllers;

    使用Illuminate \ Http \ Request;
    使用Laravel \ Passport \ Http \ Controllers \ AccessTokenController;

    类ApiTokenController扩展了AccessTokenController
    {

    }

    • 然后创建到该控制器和方法的路由(因为此控制器继承了所有父控制器方法):

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

相关问题