为什么我在前端更改用户密码后,_USER_LOGGED_IN()返回FALSE?

时间:2013-10-27 作者:Jason

我已经编写了一个自定义前端更改密码页面。在页面顶部,我有一段代码:

<?php if ( !is_user_logged_in() ) { auth_redirect(); } ?>   
处理请求并更改用户密码后,页面将绘制,但会触发下一个页面视图is_user_logged_in() 返回false并将用户发送到登录页面。。。查看代码后is_user_logged_in() 我猜在用户的cookie中有些东西会失效,但我不知道是什么。

有什么指示吗?

2 个回复
SO网友:fuxia

登录cookie的名称为\'wp-postpass_\' . COOKIEHASH 哪里COOKIEHASHwp-config.php 或在中wp-includes/default-constants.php function wp_cookie_constants().

该值为:

$hasher->HashPassword( wp_unslash( $_POST[\'post_password\'] ) )
无论何时更改密码,cookie都不再匹配,并且is_user_logged_in() 必须返回FALSE.

在用户更改密码后,立即将其发送到登录屏幕
或在保存密码后对用户进行身份验证:

require_once ABSPATH . \'wp-includes/class-phpass.php\';
$hasher = new PasswordHash( 8, true );
$expire = apply_filters( \'post_password_expires\', time() + 10 * DAY_IN_SECONDS );
setcookie( \'wp-postpass_\' . COOKIEHASH, $hasher->HashPassword( wp_unslash( $_POST[\'post_password\'] ) ), $expire, COOKIEPATH );

SO网友:Jason

回答我自己的问题感觉很奇怪(这应该是一个新问题吗?),但阅读之后this question 我发现以下代码段更改了行为:

//action hook for plugins and extra fields saving                          
do_action(\'edit_user_profile_update\', $current_user->ID);
wp_redirect( get_permalink() );
exit();
我在打电话给wp_update_user() 并且is\\u user\\u logged\\u不再返回false。为什么会这样?

结束