Laravel - 使用社交网站时使用子域作为登台环境

时间:2015-12-21 12:09:53

标签: php laravel-5

我有一个域名www.example.com并创建了一个暂存环境,名为stag.example.com。

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

我遇到的问题是,当我访问www.example.com时,它会生成一个名为.example.com的laravel_session,我可以使用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

1 个答案:

答案 0 :(得分:2)

问题在于Laravel希望您在将子域与会话一起使用时链接到同一个项目。

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

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