fat*_*gic 7 php middleware routes laravel 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));
}
Run Code Online (Sandbox Code Playgroud)
最终目标是,如果标头不存在,oauth端点将返回错误.
小智 9
您可以尝试以下操作:转到app/Providers/AuthServiceProvider
并查找function boot()
。在此功能中,您将看到用于注册护照路线的行。默认代码是Passport::routes()
。此routes()
方法接受options数组作为第二个参数。您可以使用它来设置Passport路由的中间件。
Passport::routes(null, ['middleware' => 'api']);
Run Code Online (Sandbox Code Playgroud)
例如,如果您只需要向一个 Passport 路由添加中间件/oauth/token
,您可以这样做:
php artisan r:l
AccessTokenController@issueToken
Run Code Online (Sandbox Code Playgroud)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
包括路由门面加在上面这种使用声明的地方:
use Illuminate\Support\Facades\Route;
Run Code Online (Sandbox Code Playgroud)
然后在boot()
方法上,将 Passport::routes() 放在 Route::group() 中,如下所示:
Route::group(['middleware'=>'MyFunkyCustomMiddleware'], function(){
Passport::routes(); // <-- Replace this with your own version
});
Run Code Online (Sandbox Code Playgroud)
希望有帮助!
归档时间: |
|
查看次数: |
4378 次 |
最近记录: |