2017-12-05 25 views
0

영어 (나쁜 언어) 죄송합니다. 나는 같은 질문을하지만 다른 생각으로 생각하지만, 내 생각은 다르다. curl 요청을 사용하여 wordpress에서 laravel url을 컴파일해야합니다. 내가 무엇을 말하려고하는지 더 잘 이해할 수 있도록 제 코드를 참조하십시오.laravel csrf_token wordpress에서 컬을 사용하여 url 요청을받을 때 불일치가 발생했습니다.

<html lang="{{ config('app.locale') }}"> 
    <head> 
     <!-- ImportInWordpressHeaderStart --> 
     <meta charset="utf-8" /> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> 
     <meta name="csrf-token" content="{{ csrf_token() }}" /> 
     <title>{{ config('app.name', 'Laravel') }}</title> 
     <!-- ImportInWordpressHeaderEnd --> 
     </head> 
    <body> ....... 
     //here is my complete html part ignore it. 


    <!-- ImportInWordpressFooterScriptStart --> 
    <script type="text/javascript" src="{{ asset('frontend/js/jquery-2.1.0.min.js') }}"></script> 
    <script type="text/javascript"> 
    $("#login form").on('submit', function (e){ 
       e.preventDefault(); 

       $.ajax({ 
        type: $(this).attr('method'), 
        url: $(this).attr('action'), 
        data: $(this).serialize(), 
        dataType: "json", ........... // the rest ajax code. 

    <!-- ImportInWordpressFooterScriptEnd --> 

코드의 상단 부분은 완벽하게 작동하는 laravel에서 완료되었습니다. 이제 WordPress의 테마 머리글과 바닥 글에서 내가 한 것을보십시오.

<?php 
//Laravel Home url 
$url = "http://example.com/home"; 
$ch = curl_init(); 

// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

// grab URL and pass it to the browser 
$output = curl_exec($ch); 

//Regular expression to excerpt the targeted portion 
preg_match('/<!-- ImportInWordpressFooterStart -->(.*?)<!--ImportInWordpressFooterEnd -->/s', $output, $footer); 
preg_match('/<!-- ImportInWordpressFooterScriptStart -->(.*?)<!-- ImportInWordpressFooterScriptEnd -->/s', $output, $script); 
// close curl resource, and free up system resources 
curl_close($ch); 
?> 

<?php echo $footer[0]; 
     wp_footer(); 
     echo $script[0]; 
?> 

지금 laravel에 나는 그것이 완벽에 기록됩니다 로그인을 클릭했을 때하지만 난 워드 프레스에서 동일한 작업을 수행 할 때 그것은 나에게

http://example.com/wordpress 

워드 프레스와 laravel이 토큰 불일치 오류를 준다 같은 도메인에서 나는 wordpress에서 같은 laravel header footer를 다시 만들고 싶지 않습니다. 더 좋은 아이디어는 인정 될 것입니다. 감사합니다

+0

따라서 example.com/wordpress에서 하나의 wordpress를 실행하는 동안 주 도메인은 example.com이고 Laravel에서 실행됩니까? 또한 데이터베이스는 어떻게 설정됩니까? 두 앱이 동일한 사용자 정보를 공유합니까? 어느 경우 든 솔루션을 가지고 있습니다 – codiiv

+0

예, 동일한 도메인에있는 모든 것, 그리고 laravel 및 wordpress 테이블은 모두 단일 데이터베이스에 있습니다. –

답변

1

각 쿠키 세션에는 고유 한 csrf 토큰이 있으며, curl로 수신 된 쿠키 세션 ID를 브라우저로 전송하지 않거나 그 반대의 경우도 마찬가지입니다. 따라서 브라우저는 자신의 쿠키 세션을 사용하여 로그인을 시도하고 curl의 쿠키 세션의 csrf 토큰을 사용하면 확실히 작동하지 않습니다.

해결 방법 : 브라우저의 쿠키를 사용하여 컬링하여 csrf 토큰을 가져 오십시오. 당신은 CSRF 토큰을 얻을 페이지가 새로운 설정 쿠키 헤더를 보내는 경우 명시 적으로이 작업을 수행하는 코드를 작성하지 않는 한, 컬이 브라우저에 그 헤더를 전송하지 않습니다

$str=''; 
foreach($_COOKIE as $n=>$v){ 
    $str.=$name.'='.$v.'; '; 
} 
curl_setopt($ch,CURLOPT_COOKIE,$str); 
  • 참고. 예를 들어 쿠키 세션을 가져 오는 url이 브라우저의 세션 ID도 다시 생성하고 새 ID를 브라우저로 전송하지 않으면 브라우저를 효과적으로 로그 아웃합니다.
+0

안녕하세요. 내가 쿠키를 덤프 시도하고 배열에 laravel_session 및 XSRF - TOKEN지고 있어요. 여전히 csrf_token을 얻지 못했습니다. 또한 아약스 헤더를 사용하여 보내려고했지만받을 수 없습니다. 귀하의 코드와 함께 내 세션이 잘 작동하지만 로그인하지 않습니다. –

+0

완벽한 남자. 솔루션은 일주일 이상 노력한 후에 작동했습니다. –