私はsymfony 2バックエンドを持っており、それをサーバにインストールしました。私のフロントエンドはionic PWAなので、ブラウザで動作し、そのサーバにもインストールされますが、他のサブドメインにもインストールされます。私はバックエンドにWebアプリケーションからの要求を送信すると、私はこのエラーを取得しています:Symfony 2 - OPTIONSリクエストを許可する
OPTIONS https://api.example.com/api/login.json
XMLHttpRequest cannot load https://api.example.com/api/login.json . Response for preflight has invalid HTTP status code 405
これは、ログインアクションのための私のコードです:
/**
* Login via username and password or via API key
*
* @Doc\ApiDoc(
* section="Security",
* description="Login",
* views={"default", "security"}
*)
*
* @param ParamFetcher $params
*
* @Rest\RequestParam(name="username", nullable=true, description="Username")
* @Rest\RequestParam(name="password", nullable=true, description="Password")
* @Rest\RequestParam(name="apikey", nullable=true, description="API key (alternative to username + password)")
*
* @Rest\Post("/login", name="api_security_login", options={"method_prefix" = false})
*
* @return Response
*/
public function loginAction(ParamFetcher $params)
{
//...do some stuff here...//
$data = array(
'user' => $userValue,
'apikey' => $user->getApiKey(),
);
$groups = array('default', 'private');
return $this->createAPIResponse(self::STATUS_OK, $data, $groups);
}
これはレスポンスからヘッダーです。
Access-Control-Allow-Methods:GET,POST,OPTIONS,DELETE,PUT
Access-Control-Allow-Origin:*
Allow:POST
Cache-Control:no-cache
Connection:Keep-Alive
Content-Length:54
Content-Type:application/json
Date:Tue, 29 Aug 2017 08:33:26 GMT
Keep-Alive:timeout=5, max=100
Server:Apache
これはprod.logファイルにエラーメッセージです:
request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException: "No route found for "OPTIONS /api/login.json": Method Not Allowed (Allow: POST)" at /var/www/example.com/api/htdocs/symfony/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/RouterListener.php line 163 {"exception":"[object] (Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException(code: 0): No route found for \"OPTIONS /api/login.json\": Method Not Allowed (Allow: POST) at /var/www/example.com/api/htdocs/symfony/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/RouterListener.php:163, Symfony\Component\Routing\Exception\MethodNotAllowedException(code: 0): at /var/www/example.com/api/htdocs/symfony/app/cache/prod/appProdUrlMatcher.php:855)"} []
したがって、「POST」だけが許可されている「許可」ヘッダーのために、CORSが許可されていないために送信されるOPTIONS要求のように見えます。だから、すべてのルートでそれを修正する最良の方法は何ですか?あなたがOPTIONS
リクエストにお答えしたい場合は、@Rest\Options
注釈を使用してオプションのルートを定義する必要が
@Rest\Post("/login", name="api_security_login", options={"method_prefix" = false})
:
はすでに '' 'でそれを試してみました@Rest \ Options( "/ login"、name = "api_security_login_options"、options = {"method_prefix" = false}) '' 'はポストの下にありますが、それでも同じ問題です – Nono