2017-12-12 4 views
1

Ich rufe eine Login-Methode von Subdomain auf Hauptdomain, und ich machte eine CORS-Middleware, die sich darum kümmern sollte. Es funktioniert jedoch nicht wie erwartet.Laravel CORS Ausgabe

Ich möchte überprüfen, ob Anfragen von einer bestimmten Domain kam, also versuchte ich dies zu tun:

public function handle($request, Closure $next) 
{ 
    if(!isset($_SERVER['HTTP_REFERER'])) 
     return $next($request); 

    $originalDomain = config('session.domain'); 

    $parsedUrl = parse_url($_SERVER['HTTP_REFERER']); 
    $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'); 

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

Aber das Problem, das ich habe, ist, dass $_SERVER['HTTP_REFERER'] manchmal nicht den Wert zurückgeben ich erwarte. Sollte es nicht Ursprung der Anfrage zurückgeben?

+0

** ‚HTTP_REFERER‘ Die Adresse der Seite (falls vorhanden), die den User-Agent auf den aktuellen bezeichnet Seite. Dies wird vom Benutzeragenten festgelegt. Nicht alle Benutzeragenten werden dies festlegen, und einige bieten die Möglichkeit, HTTP_REFERER als eine Funktion zu ändern. Kurz gesagt, es kann nicht wirklich vertraut werden. ** – madalinivascu

+0

Okay, und die Lösung? – Norgul

+0

Verwenden Sie eine statische URL? – madalinivascu

Antwort

0

ich eigentlich Referrer Ursprung geändert und hinzugefügt, diesen Teil des Codes, die mein Problem behebt:

if (isset($_SERVER['HTTP_ORIGIN'])) 
     $referrer = $_SERVER['HTTP_ORIGIN']; 
    else 
     $referrer = request()->url();