抱歉我的英语不好。我想同样的问题,但有不同的想法,但我的想法是不同的。我要问的是我使用curl请求在wordpress中编译了laravel 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当我点击登录时它完全登录但是当我尝试在wordpress中执行相同操作时它会给我令牌不匹配错误
http://example.com/wordpress
wordpress和laravel都在同一个域中我不想再在wordpress中创建相同的laravel页眉。任何更好的主意将不胜感激。感谢
答案 0 :(得分:1)
每个cookie会话都有自己的csrf令牌,您似乎不会尝试将curl收到的cookie会话ID传输到浏览器,反之亦然。因此,浏览器将尝试使用它自己的cookie会话登录,并使用curl的cookie会话的csrf标记,这肯定不会起作用。
解决方案:使用浏览器的cookie,使curl获取csrf令牌。
$str='';
foreach($_COOKIE as $n=>$v){
$str.=$name.'='.$v.'; ';
}
curl_setopt($ch,CURLOPT_COOKIE,$str);