Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自定义登录页面中的WordPress密码重置获取错误=invalidkey错误_Php_Wordpress_Wordpress Login - Fatal编程技术网

Php 自定义登录页面中的WordPress密码重置获取错误=invalidkey错误

Php 自定义登录页面中的WordPress密码重置获取错误=invalidkey错误,php,wordpress,wordpress-login,Php,Wordpress,Wordpress Login,在我的WordPressV5.7中,我有自定义的登录页面 下面的代码接受密码重置请求,并从自定义登录页面发送电子邮件 add_filter("retrieve_password_message", "custom_password_reset", 99, 4); function custom_password_reset($message, $key, $user_login, $user_data) { $key = get_passwor

在我的WordPressV5.7中,我有自定义的登录页面

下面的代码接受密码重置请求,并从自定义登录页面发送电子邮件

add_filter("retrieve_password_message", "custom_password_reset", 99, 4);

function custom_password_reset($message, $key, $user_login, $user_data) {

    $key = get_password_reset_key($user_data);
    
    $message = sprintf(__('To reset password for %s, visit the following address:'), $user_data->user_email) . "\r\n\r\n";
    $message .= site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . "\r\n\r\n";

    return $message;
}
上面的代码生成下面的URL并向用户发送电子邮件

https://www.example.com/wp-login.php?action=rp&key=XVBzvTRG17rKaG4brjH6&login=user_name
以下是自定义密码重置页面中的表单:

<form name="resetpassform" id="resetpassform" action="<?php echo esc_url(network_site_url('wp-login.php?action=resetpass', 'login_post')); ?>" method="post" autocomplete="off">

    <input type="hidden" id="user_login" value="<?php echo $_GET['login']; ?>" autocomplete="off" />

    <input id="pass1" name="pass1" type="password" value="" placeholder="New Password" autocapitalize="off" data-reveal="1">
    <input id="pass2" name="pass2" type="password" value="" placeholder="Confirm New Password" autocapitalize="off">

   <input type="hidden" name="key" value="<?php echo $_GET['key']; ?>" />
     <button type="submit" id="resetpass-button" name="submit">Save New Password</button>
</form>

用户无法从自定义登录页面重置密码,并获得
errors=invalidkey
错误。

您的表单包含
pass1
pass2
作为成员,但是,您的后端分别需要
rp\u-key
rp\u-login
。正因为如此,两者不兼容,导致了您刚才描述的不希望出现的行为。为了解决此问题,您需要确保
表单
密码
输入
元素的
名称
与您在后端使用的键匹配,因此,您需要相应地更改
表单
名称
或您提供给$
\u请求
的密钥以获取它们。

您没有命名该字段#user\u login请命名
rp\u login
,因此您可以通过
$\u请求
获取该字段,您命名的
rp\u密钥
也一样

<input name="rp_login" type="hidden" id="user_login" value="<?php echo $_GET['login']; ?>" autocomplete="off" />

rp\u键
是用户登录时的密码重置键。而
pass1
pass2
字段用于创建新密码并验证匹配。如果我的理解有误,请告诉我。@King我知道这是我的意图,但在表单中没有名为
rp\u key
的元素。后端希望它存在并将其传递给函数,如
$user=check\u password\u reset\u key($rp\u key,$rp\u login)
<input name="rp_login" type="hidden" id="user_login" value="<?php echo $_GET['login']; ?>" autocomplete="off" />
print_r([$rp_key , $rp_login ]);
die();
$user = check_password_reset_key($rp_key, $rp_login);