Symfony:身份验证请求失败:无效的 CSRF 令牌

Posted

技术标签:

【中文标题】Symfony:身份验证请求失败:无效的 CSRF 令牌【英文标题】:Symfony: Authentication request failed: Invalid CSRF token 【发布时间】:2014-08-17 22:46:49 【问题描述】:

我在登录 Symfony2 应用程序时收到以下错误:

[2014-06-27 00:36:22] security.INFO:身份验证请求失败:CSRF 令牌无效。 [] []

运行时间:

Symfony2 SonataUserBundle Vagrant(通过 Puphpet.com 使用 puppet) Safari/OSX

相同的设置在 Ubuntu 主机系统上工作。

感谢您的帮助。

security.yml:

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

    secured_area:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
            login_path: fos_user_security_login
            check_path: fos_user_security_check
        logout:
            invalidate_session : false
            path: fos_user_security_logout
        anonymous: true
        switch_user: true

Application/Sonata/UserBundle/Resources/views/Security/login.html.twig

% extends "FOSUserBundle::layout.html.twig" %

% trans_default_domain 'FOSUserBundle' %

% block fos_user_content %
% if error %
    <div class="alert alert-danger">
        <button type="button" class="close" data-dismiss="alert">&times;</button>
         error|trans 
    </div>
% endif %

<form class="form-horizontal" action=" path("fos_user_security_check") " method="post">
    <fieldset>
        <legend>Login</legend>
        <input type="hidden" name="_csrf_token" value=" csrf_token " />

        <div class="form-group">
            <label class="col-lg-2 control-label required" for="username"> 'security.login.username'|trans </label>
            <div class="col-lg-5">
                <input type="text" id="username" name="_username" placeholder="Username" value=" last_username " required="required" class="form-control" />
            </div>
        </div>

        <div class="form-group">
            <label class="col-lg-2 control-label required" for="password"> 'security.login.password'|trans </label>
            <div class="col-lg-5">
                <input type="password" id="password" name="_password" placeholder="Password" required="required" class="form-control" />
            </div>
        </div>

        <div class="form-group">
            <div class="col-lg-offset-2 col-lg-5">
                <input type="checkbox" id="remember_me" name="_remember_me" value="on" />
                <label for="remember_me"> 'security.login.remember_me'|trans </label>
            </div>
        </div>

        <div class="form-group">
            <div class="col-lg-offset-2 col-lg-5">
                <a href=" path("fos_user_resetting_request") "> 'resetting.request.submit'|trans </a>
                <input type="submit" id="_submit" name="_submit" value=" 'security.login.submit'|trans " class="btn btn-primary form-control" />
            </div>
        </div>
    </fieldset>
</form>
% endblock fos_user_content %

使用 FOSUserBundle 和 SonataUserBundle 的任何其他内容

【问题讨论】:

你能贴一些代码(你的登录文件) 当然,见上文。 输入_csrf_token是否有值当你得到登录页面? (您可以使用导航器中的开发人员工具对其进行检查) 是的,输入字段填充了令牌: 【参考方案1】:

我现在可以解决我的问题了。会话保存路径上的写权限似乎有问题。如果我将配置更改为使用默认会话保存路径,如下所示:

# app/config/config.yml
framework:
    session:
        save_path: null

然后用/var/lib/php/session代替/var/www/myproject/app/cache/dev/sessions

/var/www/crowdcustoms/app/cache/dev/sessions的权限:

drwxr-xr-x   4 501 dialout    136 Jun 29 20:37 sessions/

/var/lib/php/session的权限

drwxrwxr-x  2 www-data www-data 4096 Jun 29 20:36 session

【讨论】:

还有 drwxrwxrwx 4 501 dialout 136 Jun 29 20:37 sessions/ 不能使用 Symfonys 会话保存路径。 这为我修好了。【参考方案2】:

您忘记了上下文,csrf_token('authentication') 应该可以解决问题!

参考:http://symfony.com/doc/current/cookbook/security/csrf_in_login_form.html

【讨论】:

您好,令牌值可用。我尝试了您的修复,但无论如何都没有改变。相同的软件也在另一个主机系统上运行。

以上是关于Symfony:身份验证请求失败:无效的 CSRF 令牌的主要内容,如果未能解决你的问题,请参考以下文章

VueJs 前端的无效 CSRF 令牌错误(symfony 5)

Symfony 5 登录表单操作返回无效的 CSRF 令牌

使用 Symfony 框架在生产服务器上的用户登录失败(身份验证请求无法处理,因为...)

使用Symfony框架在生产服务器上登录失败(由于...无法处理身份验证请求)

CSRF 验证失败。请求中止。我保留了 ta 标签 % csrf_token % 仍然得到这个

停止在身份验证时重新生成/使 CSRF 无效