2017-12-12 28 views
1

메인 도메인의 서브 도메인에서 로그인 방법을 호출 중이며이를 처리해야하는 CORS 미들웨어를 만들었습니다. 그러나 예상대로 작동하지 않습니다.Laravel CORS issue

나는 요청이 특정 도메인에서 온 경우 확인하려면, 그래서 나는이 일을 시도 :

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'); 
} 

하지만 난 데 문제는 $_SERVER['HTTP_REFERER'] 가끔 내가 기대 값을 반환하지 않습니다. 요청의 출처를 반환하면 안됩니까?

+0

** 'HTTP_REFERER' 현재에 사용자 에이전트를 참조하는 페이지의 주소 (있는 경우) 페이지. 이것은 사용자 에이전트에 의해 설정됩니다. 모든 사용자 에이전트가이를 설정하는 것은 아니며 일부는 HTTP_REFERER를 기능으로 수정할 수있는 기능을 제공합니다. 간단히 말해서, 그것은 정말로 신뢰할 수 없습니다. ** – madalinivascu

+0

좋아요, 그 해결책 은요? – Norgul

+0

정적 URL을 사용 하시겠습니까? – madalinivascu

답변

0

은 실제로 기원 리퍼러를 변경하고 내 문제를 해결하는 코드의이 부분을 추가 :

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