我有一个域名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
答案 0 :(得分:2)
问题在于Laravel希望您在将子域与会话一起使用时链接到同一个项目。
有几种解决方案。
例如,一个是使用可以在项目之间共享的另一个会话驱动程序。
另一个是在两个项目中使用另一个cookie名称。您可以在config\session.php
中更改Cookie名称。您可以在此处添加getenv()
功能,以便在.env
文件中设置Cookie名称。