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 文档中,没有关于如何对调用进行身份验证的信息(使用哪个身份验证标头、哪种身份验证等)。

如何验证对 LearnDash 的调用?

我不是 Wordpress 专家,但可能有一种标准方法可以对插件的 API 进行这种经过身份验证的调用?

PS:LearnDash 安装在我需要调用的同一个 Wordpress 安装中,我不能直接调用函数,至少我在 LearnDash 文档中没有找到所需的函数。

4

1 回答 1

0

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

}
于 2022-02-12T11:26:57.337 回答