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

时间:2017-08-04 02:20:57

标签: php laravel routes middleware laravel-passport

我在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端点将返回错误。

3 个答案:

答案 0 :(得分:4)

您可以尝试

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

答案 1 :(得分: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
});

希望有所帮助!

答案 2 :(得分:3)

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

  1. 点击php artisan r:l
  2. 查找您需要的路线
  3. 检查用于此路线的控制器和方法,例如,它将是AccessTokenController@issueToken
  4. 创建扩展AccessTokenController的控制器,您可以将其留空
  5. namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use Laravel\Passport\Http\Controllers\AccessTokenController;
    
    class ApiTokenController extends AccessTokenController
    {
    
    }
    
    1. 然后创建到该控制器和方法的路由(因为此控制器继承了所有父控制器方法):
    2. Route::middleware('MyMiddleware')->post('/api-token', 'ApiTokenController@issueToken');