Wordpress - 如何使用 REST API 更新用户密码

问题描述 投票:0回答:5

我在我的网上商店中也使用

wordpress
以及
woocommerce
,并且还使用
woocommerce REST API
来表示
Android app

我使用了

WP REST API
JWT Authentication for WP-API
插件通过 REST API 进行用户身份验证和登录。

现在当我使用下面的API来更改密码时

https://www.my-domain.com/wp-json/wp/v2/users/<id>

低于错误

{ "code": "rest_cannot_edit", "message": "抱歉,您不允许 编辑此用户。", "data": { "status": 401 } }

我不知道为什么会收到此错误,因为身份验证在登录时完成一次。有人可以帮帮我吗?

android wordpress rest api woocommerce
5个回答
9
投票

创建您的自定义 API

网址

https://yourdomain/api/change_password.php

参数

user_id:10
password:123456  //current password 
new_password:123456

在根目录中创建文件夹api并创建文件change_password.php

change_password.php

<?php
include '../wp-load.php';

$user_id = $_REQUEST['user_id'];
$user = get_user_by( 'id', $user_id );

$password = $_REQUEST['password'];
$new_password = $_REQUEST['new_password'];

if(empty($user_id)){
    $json = array('code'=>'0','msg'=>'Please enter user id');
    echo json_encode($json);
    exit;    
}
if(empty($password)){
    $json = array('code'=>'0','msg'=>'Please enter old password');
    echo json_encode($json);
    exit;    
}
if(empty($new_password)){
    $json = array('code'=>'0','msg'=>'Please enter new password');
    echo json_encode($json);
    exit;    
}
$hash = $user->data->user_pass;
$code = 500; $status = false;
if (wp_check_password( $password, $hash ) ){
    $msg = 'Password updated successfully';
    $code = 200; $status = true;
    wp_set_password($new_password , $user_id);
}else{
    $msg = 'Current password does not match.';
}




$json = array('code'=>$code,'status'=>$status,'msg'=>$msg);
echo json_encode($json);
exit;

?>

它对我来说 100% 有效,试试吧


2
投票

我也有类似的问题。如果您已执行插件文档页面上提到的所有步骤,则您用于获取令牌的帐户可能存在问题。

下面是我创建的视频,详细介绍了插件的整个安装/设置过程。尝试按照我概述的步骤进行操作并再次测试。

https://youtu.be/Mp7T7x1oxDk


1
投票

尝试通过添加以下行来编辑 .htaccess 文件

RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

和你的 wp-config.php 添加

define('JWT_AUTH_SECRET_KEY', 'your-top-secret-key');

不要忘记在标头 API 调用中传递您的 JWT_token,例如

*Authorization : 'Bearer ' + YOUR_JWT_TOKEN*

0
投票

您需要通过 ajax 调用传递会话令牌/承载/随机数。这里有您感兴趣的具体文档:

https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/#cookie-authentication


0
投票
<?php
include '../wp-load.php';

$user_id = $_REQUEST['user_id'];
$user = get_user_by( 'id', $user_id );

$password = $_REQUEST['password'];
$new_password = $_REQUEST['new_password'];

if(empty($user_id)){
    $json = array('code'=>'0','msg'=>'Please enter user id');
    echo json_encode($json);
    exit;    
}
if(empty($password)){
    $json = array('code'=>'0','msg'=>'Please enter old password');
    echo json_encode($json);
    exit;    
}
if(empty($new_password)){
    $json = array('code'=>'0','msg'=>'Please enter new password');
    echo json_encode($json);
    exit;    
}
$hash = $user->data->user_pass;
$code = 500; $status = false;
if (wp_check_password( $password, $hash ) ){
    $msg = 'Password updated successfully';
    $code = 200; $status = true;
    wp_set_password($new_password , $user_id);
}else{
    $msg = 'Current password does not match.';
}




$json = array('code'=>$code,'status'=>$status,'msg'=>$msg);
echo json_encode($json);
exit;

?>

我已经将它用于restapi..当我在邮递员上测试时我收到错误..我必须先设置任何步骤? {"code":500,"status":false,"msg":"当前密码不匹配。"}

© www.soinside.com 2019 - 2024. All rights reserved.