tuupola/corsを使用しているスリム 3 プロジェクトにカスタム ミドルウェアを追加する際に問題が発生し、slim-jwt-authを認証用のベアラーとしてヘッダーに格納された jwt トークンとともに使用しています。
すべてがうまくいっています。chrome から ajax リクエストを行うと、まず options リクエストを送信してアクセスが可能であることを確認してから、jwt トークンをヘッダーに Authorization: Bearer として適切なリクエストを送信するのですが、ミドルウェアをフローに追加すると、オプション リクエストが送信され、200 Ok が返されますが、実際のリクエストは送信されません。
この問題は、カスタム ミドルウェアが最小限の形式に取り下げられ、まったく変更されていない場合でも発生します。ミドルウェアは次のように定義されます。
$container['App\Middleware\MyMiddleware'] = function ($c) {
return new \App\Middleware\MyMiddleware(
$c->get('logger')
);
};
ミドルウェア自体は次のように単純です。
namespace App\Middleware;
use Psr\Log\LoggerInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
class MyMiddleware {
protected $logger;
public function __construct(LoggerInterface $logger){
$this->logger = $logger;
}
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next) {
$next($request, $response);
return $response;
}
}
ミドルウェアは、次のようにすべてのルートに追加されます。
$app->add($container->get('App\Middleware\MyMiddleware'));
$app->add($container->get('Slim\Middleware\JwtAuthentication'));
$app->add($container->get('cors'));
MyMiddleware を無効にすると、オプション リクエストとフォローアップ リクエストの両方がヘッダーの jwt トークンを使用して実行されますが、MyMiddleware を有効にすると、オプション リクエストは正常に送信され、200 OK が返されますが、2 番目のリクエストは送信されません。
何が起こっているのか、どのようにデバッグするのか、私は本当に困惑しています。