Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-使用社交名将子域用作登台环境_Php_Laravel 5 - Fatal编程技术网

Php Laravel-使用社交名将子域用作登台环境

Php Laravel-使用社交名将子域用作登台环境,php,laravel-5,Php,Laravel 5,我有一个域名,上面写着www.example.com,并从中创建了一个登台环境,上面写着stag.example.com 在我的服务器中,我将文件克隆到两个不同的文件夹example和stag.example。它们中的每一个都正确设置了.env文件 我遇到的问题是,当我访问www.example.com时,它会生成一个名为.example.com的laravel_会话,我可以登录facebook。有了dot infront,laravel会话可以在子域中共享 现在,如果我去stag.exampl

我有一个域名,上面写着www.example.com,并从中创建了一个登台环境,上面写着stag.example.com

在我的服务器中,我将文件克隆到两个不同的文件夹example和stag.example。它们中的每一个都正确设置了.env文件

我遇到的问题是,当我访问www.example.com时,它会生成一个名为.example.com的laravel_会话,我可以登录facebook。有了dot infront,laravel会话可以在子域中共享

现在,如果我去stag.example.com并使用facebook登录,它似乎会查找名为.example.com的laravel会话,而不是应用程序本身生成的会话,因此当我使用facebook登录时,我将在AbstractProvider.php第191行获得InvalidStateException

只有在我删除了.example.com的laravel会话后,我才能访问stag.example.com并使用facebook登录

使用子域设置登台环境的方法是否错误? 或者我们不应该使用子域作为暂存环境

下面是用于生产的.env文件

APP_ENV=local
APP_DEBUG=true
APP_KEY=**Secrect**
APP_DOMAIN=example.com

DB_HOST=localhost
DB_DATABASE=example
DB_USERNAME=**Secrect**
DB_PASSWORD=**Secrect**

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

SESSION_DOMAIN=example.com

MAIL_DRIVER=mailgun
MAIL_HOST=smtp.mailgun.org
MAIL_PORT=587
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

S3_KEY=**Secrect**
S3_SECRET=**Secrect**
S3_BUCKET=**Secrect**

MAILGUN_DOMAIN=**Secrect**
MAILGUN_SECRET=**Secrect**

FB_CLIENT_ID=**Secrect**
FB_CLIENT_SECRET=**Secrect**
FB_REDIRECT=http://example.com/login/facebookCallback
登台

APP_ENV=local
APP_DEBUG=true
APP_KEY=**Secrect**
APP_DOMAIN=example.com

DB_HOST=localhost
DB_DATABASE=example
DB_USERNAME=**Secrect**
DB_PASSWORD=**Secrect**

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

SESSION_DOMAIN=stag.example.com

MAIL_DRIVER=mailgun
MAIL_HOST=smtp.mailgun.org
MAIL_PORT=587
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

S3_KEY=**Secrect**
S3_SECRET=**Secrect**
S3_BUCKET=**Secrect**

MAILGUN_DOMAIN=**Secrect**
MAILGUN_SECRET=**Secrect**

FB_CLIENT_ID=**Secrect**
FB_CLIENT_SECRET=**Secrect**
FB_REDIRECT=http://stag.example.com/login/facebookCallback

问题是,Laravel希望您在使用带有会话的子域时链接到同一个项目

有几种解决方案
例如,一个正在使用另一个可以在项目之间共享的会话驱动程序


另一种方法是在两个项目中使用另一个cookie名称。您可以在
config\session.php
中更改cookie名称。您可以在此处添加
getenv()
函数,以便在
.env
文件中设置cookie名称。

我可以这样设置cookie名称吗?“cookie'=>'stag.example',确实如此,但我会使用一个环境变量,这样您就不会意外更改live server上的cookie名称。但一旦我将cookie名称更改为stag.example。当我执行表单post时,它会在VerifyCsrfToken.php第53行中给我TokenMismatchException:这与此无关。但是,您应该从浏览器中删除此页面的所有Cookie,并在重试之前重新加载该页面。清除Cookie后,我可以执行form post,但当我访问www.example.com并尝试在stag.example.com中执行form post时,在VerifyCsrfToken.php第53行中会出现TokenmischException