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">×</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 框架在生产服务器上的用户登录失败(身份验证请求无法处理,因为...)
使用Symfony框架在生产服务器上登录失败(由于...无法处理身份验证请求)