【发布时间】:2017-06-08 08:42:20
【问题描述】:
这是一个奇怪的。
我有两个网站,一个由 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'd。
但是,一旦我访问了 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 路由文件来“修复”它,但这只是 脏,哈哈。
有什么办法解决这个问题吗?
【问题讨论】:
-
我也有同样的问题,你解决了吗?
-
我在这里发布了完整的答案:stackoverflow.com/a/55198453/470749