php - WooCommerce:“此密钥无效......”错误
问题描述
我在我的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
单击电子邮件中的链接后,我可以输入新密码并重新输入新密码(我使用 WooCommercereset_password_form
短代码来显示表单)。
但是,在填写这些字段并单击提交时,我收到以下消息:
This key is invalid or has already been used. Please reset your password again if needed.
我查看了现有的线程,即:
- WordPress:重置密码总是无效的密钥
- 密码重置无效密钥错误:这表明密钥可能被缓存。我已从服务器 (
WPEngine
) 和浏览器中清除了所有缓存,但问题仍然存在。
不确定如何进行?
我如何创建/添加重置密码表单:
- 在中注册了 WooCommerce 重置密码短代码
functions.php
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>
解决方案
它不起作用并给你一个错误的原因是你应该通过key
并且当你将模板文件调用user login
到form-reset-password.php
你的简码中时你没有进入。
您只需添加'key' => $rp_key, 'login' => $rp_login
.
您当前的代码是:
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' );
完整代码:
function wc_custom_reset_password_form( $atts ) {
$rp_key = wp_unslash( $_GET['key'] );
$user_id = absint( $_GET['id'] );
$userdata = get_userdata( absint( $user_id ) );
$rp_login = $userdata ? $userdata->user_login : '';
$user = WC_Shortcode_My_Account::check_password_reset_key( $rp_key, $rp_login );
return wc_get_template( 'myaccount/form-reset-password.php', array( 'form' => 'reset_password', 'key' => $rp_key, 'login' => $rp_login ) );
}
add_shortcode( 'reset_password_form', 'wc_custom_reset_password_form' );
您可以将key
和user id
(来自查询参数)的验证添加到此代码中。
推荐阅读
- fullcalendar - Fullcalendar 将某天的事件转移到某些客户身上
- c++ - 在 C++ 中实现虚函数和运行时多态性时的编译时错误
- javascript - 错误:podfile 更新后 `Podfile` 中的 `React` 具有不同来源的多个依赖项
- python - GITHUB API 技术问题
- powerbi - 动态切片器选择项目 DAX
- reactjs - 将道具传递给 createMaterialTopTabNavigator 中的所有选项卡的问题
- python - 使用来自另一个数据框python的公共数据删除数据
- r - 考虑大小写字母相同的单词
- netsuite - 将带有内置搜索的选择字段添加到 Suitelet
- reactjs - CardGroup 表带反应溢出屏幕