php wordpress密码更改 - 登出我!
我试图建立一个我自己的简单wordpress密码更改脚本(当然,基于一个插件真的) - 密码已成功更改 - 但它会在更改完成后将我注销!以下是使用的代码。任何人都可以看到我正在注销的地方以及如何防止它?谢谢!php wordpress密码更改 - 登出我!
$update = $wpdb->query($wpdb->prepare("UPDATE {$wpdb->users} SET `user_pass` = %s WHERE `ID` = %d",array(wp_hash_password($_POST['admin_pass1']),$user_ID)));
if(!is_wp_error($update))
{
wp_cache_delete($user_ID,'users');
wp_cache_delete($user->user_login,'userlogins');
wp_logout();
if (wp_signon(array('user_login'=>$user->user_login,'user_password'=>$_POST['admin_pass1']),false)):
wp_redirect(admin_url());
endif;
ob_start();
}
其实这个:
if(!is_wp_error($update))
{
wp_cache_delete($user_ID,'users');
wp_cache_delete($user->user_login,'userlogins');
wp_logout();
if (wp_signon(array('user_login'=>$user->user_login,'user_password'=>$_POST['admin_pass1']),false)):
wp_redirect(admin_url());
endif;
ob_start();
}
意味着,如果没有错误以下功能将被执行。其中一个功能是wp_logout()
,如果执行条件块,将始终调用它。
如果这不是你想要的东西,那么你要考虑更换:
if(!is_wp_error($update))
有:
if(is_wp_error($update))
我甚至不使用WP和'wp_logout()'似乎很明显。对我来说,我看到'如果没有错误更新,然后做包括wp_logout()'的东西。事实上,该块中没有任何东西看起来是必要的,但正如我所说,我不使用WP – 2011-04-18 16:53:53
确保代码是HTTP头的结束和开始前运行常规页面内容。如果您在页面生成过程中无意中等待太久,您可能不会收到任何警告。它会全部失败,你会被神秘地注销(即使wp_signon()
返回一个有效的WP_User
对象)。
重置密码后,必须设置/复位饼干(http://codex.wordpress.org/Function_Reference/wp_set_auth_cookie)
这样
$update = $wpdb->query($wpdb->prepare("UPDATE {$wpdb->users} SET `user_pass` = %s WHERE `ID` = %d",array(wp_hash_password($_POST['admin_pass1']),$user_ID)));
if(!is_wp_error($update))
{
wp_cache_delete($user_ID,'users');
wp_cache_delete($user->user_login,'userlogins');
wp_logout();
if (wp_signon(array('user_login'=>$user->user_login,'user_password'=>$_POST['admin_pass1']),false)):
wp_redirect(admin_url());
endif;
ob_start();
}else{
wp_set_auth_cookie($current_user_id, true);
}
要重设密码,你最好使用WordPress的功能,如因与其他应用程序集成wp_check_password和wp_set_password /插件。
如果您仍然在寻找关于此主题的答案:,我找到了解决方案!
总之,更新密码后,清除数据并注销 (像你一样)
wp_cache_delete($user_ID,'users');
wp_cache_delete($user->user_login,'userlogins');
wp_logout();
用户注销现在
然后
做一个“重定向”到一个新的页面再次自动登录 通过add_action('wp', 'auto_login');
(通过'标题'发送任何内容之前,我们必须这样做)来接听此页面的电话
auto_login函数然后可以处理您的请求来自动登录给定的用户。(通过$ _GET参数)
所以,当我重定向到新的页面我通过两个参数 USER_ID(用户登录) 密钥(安全)
$key = password_hash('[some secret ]' . $user_id, PASSWORD_DEFAULT);
wp_redirect(get_permalink($to['fl_autologin']) . "/?p=" . urlencode($key) . "&z=" . $user_id);
exit;
然后在AUTO_LOGIN功能我找这两个参数 解密密钥来检查,如果这是奥凯
if ($_GET['z'] && password_verify('[some secret]' . $_GET['z'], urldecode($_GET['p']))) {
如果是这样,那么 登录指定用户
$user = get_user_by('id', $_GET['z']);
$user_id = $user->ID;
wp_set_current_user($user_id, $user->user_login);
wp_set_auth_cookie($user_id);
do_action('wp_login', $user->user_login);
做一些更多的安全检查,在此, 像USER_ID必须是有效的等等 如果所有的OKE, 然后才能将他重定向到一个home_page再次
希望这可以帮助您的问题
你可以尝试下面的代码。更改密码后它不会将您注销。
$userdata['ID'] = 1; //admin user ID
$userdata['user_pass'] = 'new_password';
wp_update_user($userdata);
享受;)
要小心,这会触发一个'更改密码电子邮件'发送出去,这可能是不可取的。 – 2017-03-24 08:31:33
@WaltyYeung当然,将照顾这一点。但是,如果您是开发人员,并且您忘记了管理员密码,并且您的电子邮件在本地服务器上无法正常工作,我认为这会很有用。 – 2017-03-27 05:38:57
我会认为'wp_logout();'有什么关系呢哈哈,当然 – 2011-04-18 16:44:53
,但它后点登录功能应该把我直接回到我的仪表盘.. 。这是从自己工作得很好的插件... – Fearghal 2011-04-18 16:52:45
事实上,即使删除了该块 - wordpress似乎仍然记录我,我个人觉得奇怪...... – Fearghal 2011-04-18 17:10:41