【问题标题】:CSRF Token empty when the website is in maintenance mode当网站处于维护模式时,CSRF Token 为空
【发布时间】:2019-11-22 20:54:15
【问题描述】:

我的目标是仍然允许管理员登录网站,即使在维护模式下也是如此。 但是,当网站处于维护模式时(使用php artisan down),Laravel 不会生成任何 CSRF Token。

csrf_token() 返回一个空字符串,csrf_field() 返回<input type="hidden" name="_token" value="">

如果网站未处于维护模式,则不会出现此问题。

是否可以强制生成token?

【问题讨论】:

    标签: laravel csrf


    【解决方案1】:

    一个适合您的解决方案是在启用维护模式时为您的管理员路由禁用 csrf 令牌

    为此打开

    App\Http\Middleware\VerifyCsrfToken

    并添加

    protected $except = [
        '/your/route'
    ];
    

    【讨论】:

    • 我想完全避免禁用 CSRF,但我想在登录表单 + 管理页面上禁用它不会有什么害处(因为没有人可以提出这些请求,我错了吗?)。谢谢!
    • 您可能需要做一些研究来验证禁用 CSRF 不会有任何坏处
    • 这不是一个好的做法,但在这种情况下它符合要求
    【解决方案2】:

    您可能会遇到困难,因为维护模式纯粹是为了阻止所有流量。您必须创建自己的全局中间件来检查是否设置了值(可能是 env 属性)以确定您自己的维护模式是否开启。

    你也可以说如果使用了某个IP就可以绕过中间件。

    【讨论】:

    • 有趣的解决方案。没有任何选项可以启用令牌生成,这很奇怪。 (在 Illuminate\Session\Store.php 中也没有找到任何与维护模式相关的内容!)谢谢你的好主意!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    相关资源
    最近更新 更多