这里有一个奇怪的一个。
我有两个网站,一个搭载Laravel(5.3)和一个采用WordPress。
Laravel存在于portal.example.com
WordPress的存在在example.com
我想检查哪些用户当前登录从WordPress网站的Laravel网站。
我有Laravel设置为使用cookie驱动程序的会议,并有Cookie域设置为.example.com的,所以我现在可以看到这个cookie从任何地方在WordPress网站。
在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假的。
我知道它仍然发现了两个文件,我需要为网站继续加载,如果我将其更改为无感文件名现场死亡。我甚至可以的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路线文件“修理”它但这只是脏了,哈哈。
任何想法解决的办法?
创建一个名为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。