LearnDash:如何验证 API 调用?

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

我需要从 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 文档中找到所需的函数。

wordpress api authentication learndash
2个回答
1
投票

您需要使用基本的 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)
  }

}

0
投票

发生这种情况是因为您未通过该 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中。

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