Symfony3 中的错误"The CSRF token is invalid. Please try to resubmit the form"



问题

fos用户捆绑式表单(登录,注册,...)工作正常,但我自己的表格却不是:

CSRF令牌无效。请尝试重新提交表格

我试图创建一个资源:

http://www.project.local/app_dev.php/developer/new

甚至:

http://www.project.local/developer/new

环境

  • OS X El Capitan 64位
  • Web服务器:
    • 服务器:Apache 2.4.16
    • 服务器API:Apache 2.0处理程序(MOD_PHP7)
    • 线程安全:禁用
    • 文档根:/Library/WebServer/Documents/project/web
    • PHP:7.1.2
  • Symfony:3.2.*
  • 使用的代码库使用
    • $ symfony new project
    • $ php app/console generate:doctrine:crud
  • fos用户 - bundle: ~2.0@dev
  • knp菜单捆绑包:^2.0

app/config/config.yml

framework:
    secret:          "%secret%"
    router:
        resource: "%kernel.root_dir%/config/routing.yml"
        strict_requirements: ~
    form:            ~
    csrf_protection: ~
    validation:      { enable_annotations: true }
    #serializer:     { enable_annotations: true }
    templating:
        engines: ['twig']
    trusted_hosts:   ~
    trusted_proxies: ~
    session:
        handler_id:  session.handler.native_file
        save_path:   "%kernel.root_dir%/../var/sessions/%kernel.environment%"
    fragments:       ~
    http_method_override: true
# Twig Configuration
twig:
    debug:            "%kernel.debug%"
    strict_variables: "%kernel.debug%"
    form_themes:
        - 'form/form_div_layout.html.twig'

app/config/security.yml

security:
    providers:
        fos_userbundle:
            id: fos_user.user_provider.username
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_token_generator: security.csrf.token_manager

developercontroller

public function newAction(Request $request)
{
    $developer = new Developer();
    $form = $this->createForm(DeveloperType::class, $developer);
    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($developer);
        $em->flush($developer);
        return $this->redirectToRoute('developer_show', array('id' => $developer->getId()));
    }
    return $this->render('BackendBundle:Developer:new.html.twig', array(
        'developer' => $developer,
        'form' => $form->createView(),
    ));
}

developertype

class DeveloperType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder->add('user');
    }
    public function configureOptions(OptionsResolver $resolver) {
        $resolver->setDefaults(array(
            'data_class' => Developer::class
        ));
    }
    public function getBlockPrefix() {
        return 'backendbundle_developer';
    }
}

表格 - 模板

{{ form_start(form) }}
{{ form_widget(form) }}
<button type="submit" name="{{ form.vars.name }}">Create</button>
{{ form_end(form) }}

表格 - 生成

该表格始终具有隐藏的_token输入字段 Present

<form name="form_name" method="post" class="ui form">
    <input type="hidden" name="form_name[_token]" value="YefVvhSvvNTItjw7ayDFwFi4sdf_6oOvsQjnUu9X7cw">
    <button type="submit" name="form_name">Create</button>
</form>

form_name等于backendbundle_developer

我做了什么?

  1. 谷歌搜索了几个小时,并在堆栈溢出上阅读所有类似的问题,包括上述

  2. 重新检查文件系统权限

    httpd进程在_www用户下运行,因此:

    sudo chown -R _www var/
    sudo chmod -R 775 var/
    

    会话文件是在var/sessions/下成功创建和更新的

  3. 更改app/config/config.yml条目

    session:
        handler_id: session.handler.native_file
        save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
    

    to

    session:
        handler_id: session.handler.native_file
        save_path: ~
    

根本没有成功。

类似的问题

这不是这些类似问题的重复:

  • symfony2 csrf无效

  • Symfony 3.0.1 CSRF代币存在,但无效

  • CSRF令牌无效。请尝试重新提交表格

  • symfony2:CSRF令牌无效。请尝试重新提交表格

  • Symfony2 CSRF令牌无效。请尝试重新提交表格

  • " CSRF令牌是无效的" Symfony 2中的错误,即使使用Form_rest(form)函数

  • symfony isvalid false csrf代币无效

  • Symfony 2. CSRF令牌无效

您应该更改此

<button type="submit" name="form_name">Create</button>

使用此

<button type="submit" name="form_name[submit]">Create</button>

相关内容

最新更新