【问题标题】:Laravel - using subdomain as staging environment when using socialiteLaravel - 使用社交名流时使用子域作为登台环境
【发布时间】:2016-03-27 12:15:27
【问题描述】:

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

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

我遇到的问题是,当我访问 www.example.com 时,它会生成一个名为 .example.com 的 laravel_session,我可以使用 facebook 登录。使用前面的点,laravel session 可以跨子域共享。

现在,如果我去 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

【问题讨论】:

    标签: php laravel-5


    【解决方案1】:

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

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

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

    【讨论】:

    • 我可以这样设置cookie名称吗? 'cookie' => 'stag.example',
    • 确实,但我会使用环境变量,这样您就不会意外更改实时服务器上的 cookie 名称。
    • 但是一旦我将 cookie 名称更改为 stag.example。当我发布表单时,它在 VerifyCsrfToken.php 第 53 行给了我 TokenMismatchException:
    • 这与此无关。但是您应该从浏览器中删除此页面的所有 cookie 并重新加载页面,然后再重试。
    • 当我清除 cookie 时,我能够进行表单发布,但是一旦我访问 www.example.com 并尝试在 stag.example.com 中发布表单,它就会在 VerifyCsrfToken 中给我 TokenMismatchException。 php 第 53 行
    猜你喜欢
    • 2017-10-19
    • 2015-12-09
    • 2019-06-21
    • 1970-01-01
    • 2017-11-25
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    相关资源
    最近更新 更多