我在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端点将返回错误。
答案 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
,则可以这样做:
php artisan r:l
AccessTokenController@issueToken
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');