将自定义中间件添加到 Laravel Passport 端点
Add custom middleware to Laravel Passport endpoints
我在 5.4 上有一个标准的 Laravel Passport 设置 - 它一切正常并且正在生成令牌。
我使用 auth:api 中间件和自定义中间件保护我的 API 路由,该中间件在处理任何请求之前检查请求中的特定 headers 是否存在且有效。此中间件适用于 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));
}
最终目标是如果 headers 不存在,oauth 端点将 return 出错。
在 app/Providers/AuthServiceProvider
中,通过在顶部某处添加此 use 语句来包含 Route facade:
use Illuminate\Support\Facades\Route;
然后在 boot()
方法上,将 Passport::routes() 放入 Route::group() 中,如下所示:
Route::group(['middleware'=>'MyFunkyCustomMiddleware'], function(){
Passport::routes(); // <-- Replace this with your own version
});
希望对您有所帮助!
如果您只需要将中间件添加到一个 Passport 路由,例如 /oauth/token
,您可以这样做:
- 通过键入
php artisan r:l
查找您需要的路线
- 检查此路由使用的控制器和方法,在示例中它将是
AccessTokenController@issueToken
- 创建扩展AccessTokenController的控制器,可以留空
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Laravel\Passport\Http\Controllers\AccessTokenController;
class ApiTokenController extends AccessTokenController
{
}
- 然后创建到该控制器和方法的路由(因为该控制器继承了所有父控制器方法):
Route::middleware('MyMiddleware')->post('/api-token', 'ApiTokenController@issueToken');
你可以试试这个:
前往 app/Providers/AuthServiceProvider
并寻找 function boot()
。在此函数中,您将看到一行用于为 Passport 注册路线。默认代码为 Passport::routes()
。这个 routes()
方法接受一个选项数组作为第二个参数。您可以使用它来为 Passport 路由设置中间件。
Passport::routes(null, ['middleware' => 'api']);
我在 5.4 上有一个标准的 Laravel Passport 设置 - 它一切正常并且正在生成令牌。
我使用 auth:api 中间件和自定义中间件保护我的 API 路由,该中间件在处理任何请求之前检查请求中的特定 headers 是否存在且有效。此中间件适用于 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));
}
最终目标是如果 headers 不存在,oauth 端点将 return 出错。
在 app/Providers/AuthServiceProvider
中,通过在顶部某处添加此 use 语句来包含 Route facade:
use Illuminate\Support\Facades\Route;
然后在 boot()
方法上,将 Passport::routes() 放入 Route::group() 中,如下所示:
Route::group(['middleware'=>'MyFunkyCustomMiddleware'], function(){
Passport::routes(); // <-- Replace this with your own version
});
希望对您有所帮助!
如果您只需要将中间件添加到一个 Passport 路由,例如 /oauth/token
,您可以这样做:
- 通过键入
php artisan r:l
查找您需要的路线
- 检查此路由使用的控制器和方法,在示例中它将是
AccessTokenController@issueToken
- 创建扩展AccessTokenController的控制器,可以留空
namespace App\Http\Controllers; use Illuminate\Http\Request; use Laravel\Passport\Http\Controllers\AccessTokenController; class ApiTokenController extends AccessTokenController { }
- 然后创建到该控制器和方法的路由(因为该控制器继承了所有父控制器方法):
Route::middleware('MyMiddleware')->post('/api-token', 'ApiTokenController@issueToken');
你可以试试这个:
前往 app/Providers/AuthServiceProvider
并寻找 function boot()
。在此函数中,您将看到一行用于为 Passport 注册路线。默认代码为 Passport::routes()
。这个 routes()
方法接受一个选项数组作为第二个参数。您可以使用它来为 Passport 路由设置中间件。
Passport::routes(null, ['middleware' => 'api']);