所以我一直在使用Passport来处理任何完美运行的OAuth请求。但是在某些情况下,我不需要用户实例来请求和API端点。静态列表等我为此创建了一个中间件,它工作正常。最后有些情况下我喜欢列表,我想让开发人员可以自由地使用令牌或OAuth发布到这些端点。并努力做到这一点......
任何人都有任何见解?我想我总是可以调用令牌中间件,然后从令牌中间件调用正常的护照OAuth?我不确定如何做到这一点。
链接在这种情况下不起作用,因为如果一个失败,它会启动它们,我希望它检查一个令牌,如果它不存在那么检查OAuth令牌并在此之后遵循正常行为。
Route::group(['middleware' => 'token:auth:api',
没有在文档中看到有关如何执行此操作的任何内容。但也许我错过了一些东西。
干杯
CITTI
答案 0 :(得分:0)
您可以通过制作另一个中间件来实现这一目标。在该中间件中,首先调用令牌中间件,如果失败则调用护照OAuth中间件。我已经完成了使用Tymon JWT验证令牌,如果失败将使用Laravel Passport OAuth验证。以下是中间件
的handle()函数public function handle($request, Closure $next)
{
try {
return app(\Tymon\JWTAuth\Http\Middleware\Authenticate::class)->handle($request, function ($request) use ($next) { //JWT middleware
return $next($request);
});
} catch (\Exception $exception) {
if ($exception instanceof UnauthorizedHttpException) {
return app(\Laravel\Passport\Http\Middleware\CheckClientCredentials::class)->handle($request, function ($request) use ($next) {
return $next($request);
});
}
throw $exception;
}
}
答案 1 :(得分:0)
在中间件句柄下面,用于检查正常令牌,否则将请求发送到另一个中间件以进行身份验证。 在api端点允许的授权令牌中,它可以是预定义令牌或oauth令牌。
public function handle($request, Closure $next)
{
if ($request->is('api/*')) {
if($request->hasHeader('authorization')){
$bearertoken = $request->bearerToken();
$token = $request->header('authorization');
if(!empty($bearertoken)){
return app(Authenticate::class)->handle($request, function ($request) use ($next) {
return $next($request);
},'api');
}
if(!empty($token)){
$client = Client::where('secret',$token)->first();
if(!empty($client)){
return $next($request);
}
}
}
throw new APIException("Unauthorized Access.");
}
return $next($request);
}