current user's password check

时间:2018-04-06 作者:JJang

我正在开发我的帐户页面。我设置为编辑用户信息。但是我找不到更新用户数据之前如何检查密码的确切信息。

也许,wp\\u check\\u password()可以工作。。但我不知道该怎么申请。我的代码如下。但它不起作用。你能帮帮我吗?

$current_user = wp_get_current_user();
$user = get_user_by( \'login\', $current_user->ID ); 
$pass_check = esc_attr($_POST[\'password\']);

if (  $user && wp_check_password( $pass_check, $user->data->user_pass, $user->ID) )  ) {
    wp_redirect( get_permalink() . \'?validation=passwordincorrect\' );
    exit;
}
谢谢你。

1 个回复
SO网友:Jacob Peattie

您可以使用current_user_can() 检查用户是否具有编辑特定用户的权限。如果你想这么做的话。作为第二个参数,您需要获取相关的用户ID:

if ( current_user_can( \'edit_user\', $user_id ) ) {
    // Do stuff.
}
因此,您可以通过表单发送相关的用户ID,可能作为隐藏字段,并使用该字段:

current_user_can( \'edit_user\', $_POST[\'user_id\'] )
或者您可以只使用当前用户的ID:

current_user_can( \'edit_user\', get_current_user_id() )
这些可能看起来是多余的,但从技术上讲,您可以不让用户编辑自己,因此这些方法仍然尊重网站所有者的编辑能力。

重要的一点是,如果你得到wp_get_current_user() 然后您就知道用户已登录,因此不需要检查密码/cookie等。这已经完成了。您只需检查当前用户是否具有执行某些操作的权限。

如果您试图再次检查用户的密码,那么您所拥有的应该可以工作。但我确实注意到,您的条件是这样写的,如果密码正确,它将被重定向到?validation=passwordincorrect. 如果要在密码不正确时引发错误,应将条件更改为:

if ( $user && ! wp_check_password( $pass_check, $user->data->user_pass, $user->ID ) ) {

注意添加了!.

另外,不要使用esc_attr 在提交的密码上。这可能会更改密码。如果用户已输入123<567 作为密码,您需要检查,而不是123&lt;567.

如果您试图创建登录表单,那么您应该只使用wp_login_form() 使用您自己的重定向。

结束

相关推荐

Wp_lostpassword_url未转义

我有一个ajax登录表单,还有一个丢失的密码链接,可以通过wp_lostpassword_url() 作用当我验证我得到的页面时Error: & did not start a character reference. (& probably should have been escaped as &amp;.) 在线链接所在的位置。这能以某种方式解决吗?我已经激活了woocommerce,所以它会将我发送到woocommerce页面进行登录。我可以创建一个自定义函数,将用