Laravel Passport $tokenResult为null,无需修改vendor的限流替代方案
解决Laravel Passport令牌认证$tokenResult为null及限流规则修改的最佳实践
问题场景
使用Laravel Passport实现令牌认证时,出现$tokenResult返回null的情况,推测是触发了默认的throttle:60,1限流规则。临时修改了vendor\laravel\passport\routes\web.php文件调整限流参数:
Route::post('/token', [ 'uses' => 'AccessTokenController@issueToken', 'as' => 'token', 'middleware' => 'throttle:300,1', ]);
但直接修改vendor目录不符合开发规范,需寻找合规的替代方案。
当前请求代码
$data = [ 'username' => $request->mobileNo, 'password' => $randomPassword, 'client_id' => $oauthClient->id, 'client_secret' => $oauthClient->secret, 'grant_type' => 'password', ]; $request = app('request')->create('/oauth/token', 'POST', $data); $tokenResult = json_decode(app()->handle($request)->getContent());
推荐替代方案
方案1:发布Passport路由并重写
- 执行命令将Passport的路由文件发布到项目本地目录:
php artisan vendor:publish --tag=passport-routes
- 项目根目录的
routes/auth.php会生成完整的Passport路由配置,直接修改该文件中/oauth/token路由的中间件参数即可,无需改动vendor目录。
方案2:在RouteServiceProvider中动态调整限流
若需要根据环境或业务条件动态配置限流规则,可在App\Providers\RouteServiceProvider的boot方法中覆盖原有路由配置:
public function boot() { parent::boot(); Route::middleware('web') ->prefix('oauth') ->group(function () { Route::post('/token', [ 'uses' => '\Laravel\Passport\Http\Controllers\AccessTokenController@issueToken', 'as' => 'token', 'middleware' => 'throttle:300,1', ]); }); }
该方式可灵活调整限流参数,同时避免修改第三方依赖文件。
内容的提问来源于stack exchange,提问作者V K
相关产品推荐
相关产品推荐

