【发布时间】:2021-10-14 19:16:30
【问题描述】:
我在WooCommerce 网站上创建了一个自定义重置密码页面。重置页面之前是/my-account/lost-password/,但我的自定义页面是/reset-password/。
在我的主题中,我复制了 WooCommerce customer-reset-password.php,因此我可以自定义电子邮件中的 URL 以指向我的新页面。电子邮件中的链接如下所示:
<a class="link" href="<?php echo esc_url( add_query_arg( array( 'key' => $reset_key, 'id' => $user_id ), home_url()." /reset-password/ " ) ); ?>">
<?php // phpcs:ignore ?>
<?php esc_html_e( 'Click here to reset your password', 'woocommerce' ); ?>
</a>
现在,当我转到 /lost-password/ 并输入我的电子邮件地址时。我成功收到一封重置电子邮件,其中包含指向正确页面的链接:/reset-password/?key=p5iemdCVtG4qkh5WQH8B&id=31
单击电子邮件中的链接后,我可以输入新密码并重新输入新密码(我使用 WooCommerce reset_password_form 短代码来显示表单)。
但是,在填写这些字段并单击提交时,我收到以下消息:
This key is invalid or has already been used. Please reset your password again if needed.
我查看了现有的线程,即:
- WordPress: Reset password always invalid key
-
Password reset invalid key error:这表明密钥可能被缓存。我已清除服务器 (
WPEngine) 和浏览器中的所有缓存,但问题仍然存在。
不确定如何进行?
我如何创建/添加重置密码表单:
- 在
functions.php中注册了 WooCommerce 重置密码短代码
function wc_custom_reset_password_form( $atts ) {
return wc_get_template( 'myaccount/form-reset-password.php', array( 'form' => 'reset_password' ) );
}
add_shortcode( 'reset_password_form', 'wc_custom_reset_password_form' );
- 在我的模板中添加了短代码:
<?php echo do_shortcode( '[reset_password_form]' ); ?>
customer-reset-password.php 发生了什么变化?
这是模板默认链接的内容:
<a class="link" href="<?php echo esc_url( add_query_arg( array( 'key' => $reset_key, 'id' => $user_id ), wc_get_endpoint_url( 'lost-password', '', wc_get_page_permalink( 'myaccount' ) ) ) ); ?>"><?php // phpcs:ignore ?>
<?php esc_html_e( 'Click here to reset your password', 'woocommerce' ); ?>
</a>
这是我改成的:
<a class="link" href="<?php echo esc_url( add_query_arg( array( 'key' => $reset_key, 'id' => $user_id ), home_url()." /reset-password/ " ) ); ?>">
<?php // phpcs:ignore ?>
<?php esc_html_e( 'Click here to reset your password', 'woocommerce' ); ?>
</a>
【问题讨论】:
-
问题您是否以请求重置密码的用户身份登录?
-
@CrisoforoGaspar - 我都尝试过,以用户身份和非登录用户身份登录并收到相同的消息。用户不需要登录,访问该页面的唯一方法是用户请求重置密码。澄清一下,流程是
/forgot-password > user receives email which has link to /reset-password page。我会假设key附加到查询字符串(woocommerce的一部分将更新正确的用户密码。id也附加到查询字符串,它具有它需要确定的所有详细信息要更新哪个用户。 -
好的,我明白了,让我看看我是否可以调试这个错误从技术上讲,用户在请求新密码时没有登录。
-
您是要在实时服务器或本地主机上执行此操作吗?还要确保您为您的网站使用任何缓存插件?
-
这是 WP Engine 的常见问题,您需要从 WP Engine 缓存中排除页面。请联系他们的支持,他们会解决这个问题。
标签: php wordpress woocommerce