2017-12-11 12 views
2

私は使用しているサブドメインが自分のサーバーの有効なサブドメインであるかどうかをチェックする動的なCORSミドルウェアを設定したかったのです。私はそれの背後にあるロジックをテストし、それは動作しますが、ヘッダーに変数を提供すると、何かが正しくないかのように見えますか?ここでLaravel CORS変数

コードです:

public function handle($request, Closure $next) 
{ 
    $originalDomain = config('session.domain'); 

    $parsedUrl = parse_url(request()->url()); 
    $splitDomain = explode('.', $parsedUrl['host'], 2); 
    $subdomain = $splitDomain[0]; 
    $domain = $splitDomain[1]; 

    $subdomainValid = $parsedUrl['host'] != $originalDomain && $originalDomain == $domain; 

    if(!$subdomainValid) 
     return $next($request); 

    $allowedUrl = $parsedUrl['scheme'] . '://' . $subdomain . '.' . config('session.domain_without_dot'); 

    return $next($request) 
     ->header('Access-Control-Allow-Origin', $allowedUrl) 
     ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); 
} 

No 'Access-Control-Allow-Origin' header is present on the requested resourceことを私はエラーを取得していますが、私は私が得た変数をダンプし、それを貼り付ける場合、それだけで正常に動作します。

私は、このミドルウェアは、リクエストがミドルウェアを通過する際に、サーバーに置かれているので

$parsedUrl = parse_url(request()->url()); 

$parsedUrl = parse_url($_SERVER['HTTP_ORIGIN']); 

に説明

を変更することで問題を解決してきた

+0

申し訳ありませんが、私は削除されたと思った。私はこのサイトを初めて利用していて、適切な書式設定をしていないだけでなく、私のソリューションがあなたの問題に対する答えではないことに気付きました。 PSはajaxリクエストではなく、ヘッダーにCSRFトークンを送信するための.ajaxSetupの呼び出しでした。 – user1477736

+0

https://github.com/barryvdh/laravel-corsを検討しましたか?これはワイルドカードによる起点を許可します。 – ceejayoz

+0

DBからのホワイトリストでサブドメインをクロスチェックする必要があるので、私のケースに合っていません – Norgul

答えて

1

request()->url()は、実際にはサーバーURLの値であり、要求するサブドメインの値ではありません。この変更で、サーバーリソースを要求したサブドメインのURLを取得しています。

+0

ええ、それを解析して、設定ファイルの元の値と照合しています。あなたはそれが虐待される可能性があると思いますか? – Norgul

+0

いいえ。私はまっすぐ考えていません。 CORSはあなたのサーバーではなくユーザーを保護することです – apokryfos