gpt4 book ai didi

wordpress - 如何通过 Wordpress REST API 对 LearnDash 中 protected 数据的远程访问进行身份验证?

转载 作者:行者123 更新时间:2023-12-05 08:11:05 24 4
gpt4 key购买 nike

我正在开发一个移动应用程序(在 Flutter 中),它需要从 Wordpress LearnDash LMS 环境访问用户的类(class)数据。可以通过标准 REST API 通过 https://<site>/wp-json/ldlms/v1/ 访问 Wordpress 站点。路径。

但是每当我尝试访问例如<...>/ldlms/v1/sfwd-courses/<id>/steps ,结果是 401(未授权)状态。

从 Wordpress 文档中我了解到它使用 cookie 身份验证。但添加 wordpress_logged_in_<hash>请求 header 的 cookie 似乎没有什么不同。

我在哪里可以找到访问此信息所需的缺失身份验证详细信息?

最佳答案

我刚刚构建了我的 REST API;所以我可能会有所帮助。下面的示例将:

  1. 注册自定义 rest api 端点
  2. 在首次加载时本地化服务器端变量(端点、用户对象等)
  3. 将 NONCE 附加到所有 rest 请求中,避免哈希 BS

Rest API Authentication Reference

函数.php

add_action('rest_api_init', 'register_custom_fields');
function register_custom_fields(){
register_rest_route(
'app', '/login/',
[ 'methods' => 'POST', 'callback' => 'asset_login' ]
);
}
function asset_login(){
$user = wp_signon($_POST);
if (is_wp_error($user)){
return [ 'result' => 'fail', 'error' => $user->get_error_message() ];
} else {
return [ 'result' => 'success', 'user' => [ 'ID' => $user->data->ID, 'name' => $user->data->display_name ] ];
}
}


add_action('init','stage_script');
function stage_script(){

wp_enqueue_script('asset-library', trailingslashit(get_stylesheet_directory_uri()) . 'js/asset-library.js', ['jquery']);

$assetUser = null;
if (is_user_logged_in()){
$user = wp_get_current_user();

$assetUser = [
'ID' => $user->data->ID,
'name' => $user->data->display_name,
'nickname' => $user->data->user_nicename,
'email' => $user->data->user_email,
'allcaps' => $user->allcaps
];
}

wp_localize_script( 'your-app', 'App', [
'user' => $assetUser,
'api_endpoint' => esc_url_raw( rest_url() ),
'api_version' => 'wp/v2/',
'nonce' => wp_create_nonce( 'wp_rest' )
]);
}

script.js

    // The Login Controller
let AppUser = {
loggedIn: false,
login: function(data){
$.ajax( {
url: App.api_endpoint + 'your-app/login',
method: 'POST',
beforeSend: function ( xhr ) {
xhr.setRequestHeader( 'X-WP-Nonce', App.nonce );
},
data: data,
success: function(response){
/* ... parse response ... */
},
error: function(response){
/* ... parse response ... */
}
});
}
};


// The API Controller
let QueryController = {
Objects: [],
getObjects: async function(){

let q = {};
/* ... build query stuff extracted */

try {
const response = await $.ajax( {
url: App.api_endpoint + App.api_version + 'post_object',
method: 'GET',
beforeSend: function ( xhr ) {
xhr.setRequestHeader( 'X-WP-Nonce', App.nonce );
},
data: q
});

this.Objects = response;
return response;
} catch(e) {
console.log('Error: ', e);
}
}
};

关于wordpress - 如何通过 Wordpress REST API 对 LearnDash 中 protected 数据的远程访问进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64635873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com