这是一个奇怪的。
我有两个网站,一个由Laravel(5.3)提供支持,另一个由Wordpress提供支持。
Laravel存在于portal.example.com
Wordpress存在于example.com
我试图从Wordpress网站上检查Laravel网站上当前登录的用户。
我让Laravel设置为使用cookie驱动程序进行会话,并将cookie域设置为.example.com,以便我现在可以从Wordpress站点的任何位置看到此cookie。
在wordpress头文件的顶部(或者wp-load.php文件,或者functions.php文件,我尝试了很多地方但是遇到了同样的问题)我已经包含了以下内容。
require $_SERVER['DOCUMENT_ROOT'].'/../laravel/bootstrap/autoload.php';
$laravel = require $_SERVER['DOCUMENT_ROOT'].'/../laravel/bootstrap/app.php';
$laravel->make('Illuminate\Contracts\Http\Kernel')
->handle(Illuminate\Http\Request::capture());
if (Auth::check()) {
var_dump(Auth::user()->id);
} else {
var_dump(false);
}
现在,每当我登陆Laravel网站时,我都可以访问example.com,然后在页面顶部查找我的Laravel用户的ID当前正在成功地进行var_dump。
但是,一旦我访问example.com/other-pages/,它就是var_dumping false。
我知道在网站继续加载时我仍然需要找到我需要的两个文件,如果我将它们更改为无意义的文件名,网站就会死亡。我甚至可以var_dump($ laravel)并获得一个很大的Laravel列表。
有没有人有机会知道这里会发生什么?
编辑:
我注意到的第一件事是在不起作用的页面上有所不同,如果我是var_dump($ laravel)......我得到......
protected 'routeResolver' => null
走到尽头而不是......
protected 'routeResolver' =>
object(Closure)[805]
...
编辑2:
这里有一点进步。
如果我这样做......
$kernel = $app->make('Illuminate\Contracts\Http\Kernel');
$response = $kernel->handle( $request = Illuminate\Http\Request::capture());
var_dump($response);
我可以看到这些其他页面上的响应是Laravel 404页面,因此它出现错误并且从未返回我的用户。
我可以"修复"它将每个wordpress域添加到我的Laravel路由文件中,但这只是脏,哈哈。
有什么想法解决这个问题吗?
答案 0 :(得分:0)
制作一个称为WordpressMiddlware的中间件,并在每个请求中加入它:
PHP
public function handle($request, Closure $next)
{
return $request->has("from_wordpress") ? redirect("PATH_TO_AUTH") : $next($request);
}
在wordpress中:
PHP
$kernel = $app->make('Illuminate\Contracts\Http\Kernel');
$response = $kernel->handle( $request = Illuminate\Http\Request::capture());
$response->merge(["from_wordpress" => true]);
现在,来自wordpress的每个请求都将被重定向到所需的路径,而您不会得到404。