You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Magento2合并登录注册页提交注册报reCaptcha信誉过低跳转旧页

问题描述

Magento2站点将原本独立的登录、注册表单合并到同一登录页面,通过修改登录页布局文件实现双表单同页展示后,提交客户注册请求会被重定向到原注册地址 https://mywebsite.com/customer/account/create/,返回错误:

You cannot proceed with such operation, your reCaptcha reputation is too low.

现有修改信息

  • 修改的登录页布局文件路径:/var/www/html/abc/vendor/magento/module-customer/view/frontend/layout
  • 布局配置代码:
<?xml version="1.0"?>
<!--
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <head>
        <link src="Magedelight_SMSProfile::js/profile-phone-validation.js"/>
        <css src="Magedelight_SMSProfile::css/smsprofile.css"/>
        <title>Customer Login</title>
    </head>
    <body>
        <referenceBlock name="head.components">
            <block class="Magento\Framework\View\Element\Js\Components" name="customer_account_create_head_components" template="Magento_Customer::js/components.phtml"/>
        </referenceBlock>
        <referenceContainer name="content">
            <!-- customer.form.login.extra -->
            <container name="customer.login.container" label="Customer Login Container" htmlTag="div" htmlClass="login-container">
                <block class="Magento\Customer\Block\Form\Login" name="customer_form_login" template="Magento_Customer::form/login.phtml">
                    <container name="form.additional.info" as="form_additional_info"/>
                </block>
                <!-- <block class="Magento\Customer\Block\Form\Login\Info" name="customer.new" template="Magento_Customer::form/newcustomer.phtml"/> -->
                <block class="Magento\Customer\Block\Form\Register" name="customer_form_register" template="Magento_Customer::form/register.phtml">
                    <arguments>
                        <argument name="attribute_data" xsi:type="object">Magento\Customer\Block\DataProviders\AddressAttributeData</argument>
                    </arguments>
                    <container name="form.additional.info" as="form_additional_info"/>
                    <container name="customer.form.register.fields.before" as="form_fields_before" label="Form Fields Before" htmlTag="div" htmlClass="customer-form-before"/>
                </block>
                <referenceBlock name = "customer_form_register">
                    <action method="setTemplate">
                        <argument name="template" xsi:type="string">Magedelight_SMSProfile::register.phtml</argument>
                    </action>
                </referenceBlock>
                <!-- <block class="Magento\Cookie\Block\RequireCookie" name="require-cookie" template="Magento_Cookie::require_cookie.phtml">
                <arguments>
                    <argument name="triggers" xsi:type="array">
                        <item name="registerSubmitButton" xsi:type="string">.action.submit</item>
                    </argument>
                </arguments>
            </block> -->
            </container>
            <block class="Magento\Cookie\Block\RequireCookie" name="require-cookie" template="Magento_Cookie::require_cookie.phtml">
                <arguments>
                    <argument name="triggers" xsi:type="array">
                        <item name="loginButton" xsi:type="string">.action.login</item>
                    </argument>
                </arguments>
            </block>
            <block class="Magento\Cookie\Block\RequireCookie" name="require-cookie" template="Magento_Cookie::require_cookie.phtml">
                <arguments>
                    <argument name="triggers" xsi:type="array">
                        <item name="registerSubmitButton" xsi:type="string">.action.submit</item>
                    </argument>
                </arguments>
            </block>
        </referenceContainer>
        <referenceContainer name="form.additional.info">
            <block class="Magento\Framework\View\Element\Template" name="form_additional_info_customer" template="Magento_Customer::additionalinfocustomer.phtml"/>
        </referenceContainer>
    </body>
</page>
  • 自定义登录、注册phtml模板存放路径:/var/www/html/abc/app/design/frontend/Megnor/mag110246_4/Magedelight_SMSProfile/templates
排查思路与修复方案

重定向和reCaptcha报错是连锁触发的,核心问题集中在3个点,按顺序排查修复即可:

  1. 修正核心文件修改的错误操作
    直接修改vendor目录下的核心布局文件不符合Magento开发规范,后续版本升级会直接覆盖所有改动。先把修改的布局文件复制到当前主题对应目录app/design/frontend/Megnor/mag110246_4/Magento_Customer/layout/下,后续所有修改在主题内的文件上操作,改完直接清理布局缓存生效。
  2. 解决布局块名冲突问题
    现有布局里两个RequireCookie块使用了相同的name="require-cookie",Magento同页面块名唯一,后定义的注册Cookie校验块会直接覆盖前面的登录块,导致注册提交的Cookie触发逻辑失效。把注册对应的RequireCookie块名改成require-cookie-register即可解决。
    另外布局里全局定义的form.additional.info容器和登录、注册表单内部定义的同名子容器冲突,会导致reCaptcha、表单附加字段这类需要插入表单内部的块渲染错位,无法正确嵌入表单标签内。
  3. 修复reCaptcha加载逻辑不匹配问题
    这个是触发报错的直接原因:
    • Magento默认的reCaptcha(尤其是返回信誉值过低错误的v3版本)是按路由场景加载的,注册场景的reCaptcha实例默认只在customer/account/create路由下输出,你把注册表单放到了登录路由customer/account/login下,页面加载时根本不会初始化注册场景的reCaptcha,提交时后端拿不到对应场景的合法校验token,就会判定信誉分不足,同时重定向回原生注册页。
    • 修复方式是手动在登录页布局内声明注册场景的reCaptcha块,指定插入到注册表单内部的form_additional_info容器,不要依赖全局自动加载,配置示例如下:
    <block class="Magento\ReCaptchaUi\Block\ReCaptcha" name="recaptcha-customer-register" after="-" ifconfig="customer/recaptcha/enabled" template="Magento_ReCaptchaFrontendUi::recaptcha.phtml">
        <arguments>
            <argument name="recaptcha_for" xsi:type="string">customer_create</argument>
            <argument name="jsLayout" xsi:type="array">
                <item name="components" xsi:type="array">
                    <item name="recaptcha" xsi:type="array">
                        <item name="component" xsi:type="string">Magento_ReCaptchaFrontendUi/js/reCaptcha</item>
                    </item>
                </item>
            </argument>
        </arguments>
    </block>
    
  4. 模板层校验
    打开自定义的register.phtml模板做两项检查:
    • 确认表单form标签的action属性正确指向注册提交路由customer/account/createpost
    • 确认表单内部正确输出了$block->getChildHtml('form_additional_info'),保证reCaptcha的渲染内容、隐藏字段都在表单标签内部,不要输出到表单外。
  5. 缓存清理验证
    所有修改完成后,执行php bin/magento cache:clean layout block_html full_page清理缓存,重新加载登录页,查看注册表单源码能找到reCaptcha相关的隐藏字段和JS配置后,再测试提交即可。

额外注意:检查两个表单的提交按钮类名不要混淆,登录按钮类保持.action.login、注册提交按钮类保持.action.submit,否则Cookie校验逻辑不触发也会导致提交异常。


内容的提问来源于stack exchange,提问作者Praful

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 03:20:04