当前位置: 首页 > 知识库问答 >
问题:

在Symfony3中出现错误“CSRF令牌无效。请尝试重新提交表单”

松旭
2023-03-14

FOS用户捆绑表单(登录、注册等)工作正常,但不是我自己的表格,给我:

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

当我试图在以下位置创建资源时:

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

甚至:

http://www.project.local/developer/new
  • OS X EL Capitan 64 bit
  • Web服务器:
    • 服务器:Apache 2.4.16
    • 服务器API:Apache 2.0处理程序(mod_php7)
    • 线程安全:禁用
    • 文档根:/库/WebServer/Documents/project/web
    • PHP:7.1.2
    • $symfony新项目

    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
    

    显影控制器

    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(),
        ));
    }
    

    开发者类型

    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) }}
    

    表格-生成

    表单始终存在隐藏的\u标记输入字段。

    <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\u name等于backendbundle\u developer

    >

  • 谷歌了几个小时,阅读了堆栈溢出上所有类似的问题,包括上面的问题

    重新检查了文件系统权限

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

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

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

    更改了app/config/config。yml条目

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

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

    一事无成。

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

    >

  • symfony2 CSRF无效

    Symfony 3.0.1 CSRF令牌存在但无效

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

    Symfony2:CSRF令牌无效。请尝试重新提交表单

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

    即使使用form_rest(form)函数,Symfony 2中的“CSRF令牌无效”错误

    Symfony isValid False CSRF令牌无效

    交响曲2。CSRF令牌无效

共有1个答案

养昊天
2023-03-14

你应该改变这一点

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

用这个

<button type="submit" name="form_name[submit]">Create</button>
 类似资料:
  • 问题内容: 每次尝试提交表单时,我都会收到此错误消息: CSRF令牌无效。请尝试重新提交表格 我的表单代码是这样的: 有任何想法吗? 问题答案: 您需要在表单中添加,即 截至目前,您的表单缺少CSRF令牌字段。如果您使用树枝形状表单函数来呈现表单,则将自动为您呈现CSRF令牌字段,但是您的代码显示您正在使用原始HTML来呈现表单,例如,因此您必须手动呈现该字段。 或者,只需在表单的结束标记之前添加

  • 我对Symfony2中的令牌形式有问题。(2.7.0) 行动: 我的表格: 当我测试表单时,总是显示相同的错误:“CSRF令牌无效。请尝试重新提交表单”。我确信输入隐藏在表单中。这是一种观点: 谁能帮帮我? 我测试禁用csrf保护,像这样: 行动: 形式: 但是出现了一个不同的错误:此表单不应包含额外的字段。因为令牌的隐藏输入,它还在表单中,我不知道要删除它。 谢谢你!

  • 概述 我将使用API网关作为基于Spring Security性的身份验证。我刚刚按照https://spring.io/guides/tutorials/spring-security-and-angular-js/链接中的步骤创建了一个基于其对应的github项目的“对双”模块的项目https://github.com/spring-guides/tut-spring-security-and

  • 我正在尝试使用Spring MVC 4上载带有web应用程序的文件,但出现错误: 在请求参数“\u CSRF”或标头“X-CSRF-Token”上发现无效的CSRF令牌“null”。 Spring版本: Spring版本4.1.7。发布 Spring安全4.0.1。发布 代码: web.xml spring web servlet。xml Settings.jsp 提交名为test的文件后,发布请

  • 此文件包含上载文件的表单 上传orm.jsp 我的控制器方法是 我上传时出现以下错误: HTTP状态403-在请求参数“\u CSRF”或标头“X-CSRF-Token”上发现无效的CSRF令牌“null” 我也用过Spring安全。但是我总是给出同样的错误。我尝试了很多,但无法解决它。你能帮忙解决这个问题吗?

  • 我有一个新的Symfony 3.0的奇怪问题。1安装。我用一个包含url和标题的表单PostType生成了一个新的CRUD控制器。没什么特别的。 表单按预期呈现。它包含我的url字段和标题字段。表单内部还呈现隐藏的输入字段_标记。 提交此表单时,我始终收到以下错误: 所以令牌被添加到表单中,它包含一个值,我有一个常量PHP会话cookie值,它只是使这个令牌无效。 我已经搜索了其他答案,但类似的问