【问题标题】:How to translate (and replicate) the CSRF Message in Symfony?如何在 Symfony 中翻译(和复制)CSRF 消息?
【发布时间】:2016-04-23 05:05:38
【问题描述】:

我的一些用户在我的 Web 应用程序中遇到 CSRF 错误。他们告诉我,他们不知道该怎么办。

为了有更好的用户体验,我想翻译这条消息。有人能告诉我我该怎么做吗?

另外,我如何在我的开发环境中实际复制 CSRF 错误?

我同时使用 Symfony 2.8 和 3.0。

【问题讨论】:

  • 您在网络上显示的默认消息是什么?
  • 默认消息是由 Symfony 的安全组件生成的:Invalid CSRF token。

标签: symfony csrf csrf-protection


【解决方案1】:

如果您想翻译特定的表格,请在表格选项数组 - csrf_message 中传递翻译后的值。 (至少在 3.4 symfony 上)。就像你创建时在控制器中一样

$options['csrf_message'] = 'Translated value'
$this->createForm(CheckoutType::class, $data, $options);

复制选项之一是修改前端控制器中的 $_POST 数组。就像在 app.php 中一样

$_POST['checkout']['_token'] = '1';

【讨论】:

    【解决方案2】:

    记得将您的翻译添加到验证器 validator.<lang>.<type> 文件中(不是在消息中:messages)作为示例:

    validator.en.yml

    <trans-unit id="1">
        <source>The CSRF token is invalid. Please try to resubmit the form.</source>
        <target>The CSRF token is invalid. Please try to resubmit the form.</target>
    </trans-unit>
    

    编辑 - 每次更改翻译文件后刷新缓存

    编辑 - 测试/复制行为:

    您可以使用 firebug 之类的工具来编辑和更改 _token 表单隐藏元素并提交表单或暂时从表单中删除该字段。

    希望有帮助

    【讨论】:

    • 非常感谢!你知道我如何在开发环境中复制它吗? (所以我可以测试翻译是否有效?)
    • 嗨@apfz,不客气!您可以使用 firebug 之类的工具进行编辑和更改 _token 表单隐藏元素并提交表单或暂时从表单中删除该字段。让我知道你的最佳方法。
    • 好的。感谢您的指示,我能够复制它。但是,它似乎是一个 security.. 文件,而不是创建消息的验证器文件。我不确定在哪里覆盖这个文件。我尝试过:app/Resources/Symfony/Component/Security/Core/Resources/translations/security.en.xlf、app/Resources/translations/security.en.xlf 和 app/Resources/Symfony/Component/Security/Resources/翻译/security.en.xlf
    • 您好@apfz 当然,您提到的文件是关于安全的,即用户登录(是的,如果您需要更改消息,您也需要翻译此密钥)。不要担心翻译文件的位置(任何有效路径都可以)记得每次更改值时清除缓存。希望对您有所帮助
    • 缓存确实是问题所在。问题解决了!也许您想添加有关如何将 CSRF 消息复制到您的答案的建议。
    【解决方案3】:

    您可以将消息替换为翻译文件中添加的以下行

        <trans-unit id="1">
            <source>The CSRF token is invalid. Please try to resubmit the form.</source>
            <target>The CSRF token is invalid. Please try to resubmit the form.</target>
        </trans-unit>
    

    在目标标签中,您可以更改自定义消息。如果对此有任何疑问,请告诉我

    【讨论】:

    • 不适合我。我仍然收到原始消息。翻译器本身工作正常,除此之外的任何其他错误消息都会被翻译。也不是缓存问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 2018-06-01
    • 2020-02-10
    相关资源
    最近更新 更多