我需要从 wordpress 调用 learndash API 例如这样:
wp_remote_request ('https://mywpsite/wp-json/ldlms/v1/groups', $arg);
LearnDash API 受到保护,因此我收到 401 响应:
{"code":"rest_forbidden","message":"Tut mir leid, aber Sie haben keine Berechtigung das zu tun.","data":{"status":401}}
在 LearnDash API 文档中,没有任何信息如何验证调用 (使用哪个 auth 标头、哪种身份验证等)。
如何验证对 LearnDash 的调用?
我不是 Wordpress 专家,但可能有一种标准方法可以对插件的 API 进行此类经过身份验证的调用?
P.S.:LearnDash 安装在我需要进行调用的同一个 Wordpress 安装中,我无法直接调用函数,至少我没有在 LearnDash 文档中找到所需的函数。
您需要使用基本的 JWT 身份验证,例如:https://cl.wordpress.org/plugins/jwt-authentication-for-wp-rest-api/
然后,您需要将身份验证作为中间件包含在内,以检索相应的令牌并将其与您的请求一起发送到 Learndash 端点。
在nextjs中,我使用这段代码:
export async function getCourseContent(id) {
try {
const token = await AuthJWT()
const url = `https://yourserver.com/wp-json/ldlms/v2/sfwd-lessons?course=${id}`
const courseSteps = await axios.get(url, {
headers: {
Authorization: `Bearer ${token}`
}
})
return courseSteps.data
} catch (error) {
console.log(error, 'error')
}
}
export async function AuthJWT() {
try {
const credentials = {
username: process.env.EMAIL_ADMIN,
password: process.env.PASSWORD_ADMIN
}
// console.log(credentials, 'credentials')
const headers = {
"Content-Type": "application/json"
}
const getToken = await axios.post('https://yourserver.com/wp-json/jwt-auth/v1/token',
credentials,
headers)
// console.log(getToken.data.token, 'from authjwt')
return getToken.data.token
} catch (error) {
return console.log('error', error)
}
}
发生这种情况是因为您未通过该 API 路由的身份验证。
首先在wordpress中安装WP REST API插件
那么你必须使用 JWT 令牌,例如在 PHP 中你可以使用
firebase/php-jwt
composer require firebase/php-jwt
代码示例:
<?php
require_once 'vendor/autoload.php'; // Include the JWT library
use Firebase\JWT\JWT;
// Your secret key for signing the token
$secret_key = 'your-secret-key';
// Payload data (you can customize this according to your needs)
$payload = array(
"iss" => "mywpsite.com",
"aud" => "mywpsite",
"iat" => time(),
"exp" => time() + 3600, // Token expiration time (1 hour from now)
// Add any other relevant data here
);
// Generate the JWT token
$token = JWT::encode($payload, $secret_key);
// Prepare the request headers
$headers = array(
'Authorization: Bearer ' . $token,
'Content-Type: application/json',
);
// Make the API request
$api_url = 'https://mywpsite/wp-json/ldlms/v1/groups';
$ch = curl_init($api_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);
var_dump($response);
?>
注意生成的jwt token放在Authorization header中。