身份验证
使用 DrupalClient 进行身份验证请求。
该 DrupalClient
支持多种身份验证类型。您可以使用 **Bearer** 令牌、**Basic** 令牌或提供您自己的授权头。
身份验证可以在客户端全局设置或在每个方法中自定义设置。
客户端身份验证
这是在客户端上配置的默认身份验证。
这在大多数情况下用于获取和构建静态页面。
lib/drupal.ts
import { DrupalClient } from "next-drupal"
export const drupal = new DrupalClient( process.env.NEXT_PUBLIC_DRUPAL_BASE_URL, { auth: // Configure the global auth here. })
方法身份验证
您也可以为每个方法调用设置自定义身份验证。
这通常用于进行基于会话/基于用户的身份验证调用。
import { drupal } from "lib/drupal"
const userArticles = await drupal.getResourceCollection("node--article", { params: { "filter[uid]": user.id, }, withAuth: // Set the custom auth here.})
Bearer
要配置身份验证,请提供 client_id
和 client_secret
作为选项。
⚠️
您需要在 Drupal 上启用 simple_oauth
模块。
lib/drupal.ts
// Clientexport const drupal = new DrupalClient( process.env.NEXT_PUBLIC_DRUPAL_BASE_URL, { auth: { clientId: process.env.DRUPAL_CLIENT_ID, clientSecret: process.env.DRUPAL_CLIENT_SECRET, }, })
// Methodconst article = drupal.getResource( "node--article", "293202c9-f603-444e-a426-a5637e2ade2e", { withAuth: { clientId: process.env.DRUPAL_CLIENT_ID, clientSecret: process.env.DRUPAL_CLIENT_SECRET, }, })
DrupalClient
将获取 **Bearer** 令牌并为您处理过期。
如果您需要自定义 OAuth URL,可以使用 url
选项。
lib/drupal.ts
export const drupal = new DrupalClient( process.env.NEXT_PUBLIC_DRUPAL_BASE_URL, { auth: { clientId: process.env.DRUPAL_CLIENT_ID, clientSecret: process.env.DRUPAL_CLIENT_SECRET, url: `/oauth2/token`, }, })
默认情况下,DrupalClient
使用 /oauth/token
作为默认 URL。
基础认证
您也可以使用基础认证,使用 username
和 password
进行认证。
⚠️
您需要在 Drupal 上启用 basic_auth
模块。
// Client.export const drupal = new DrupalClient( process.env.NEXT_PUBLIC_DRUPAL_BASE_URL, { auth: { username: process.env.DRUPAL_USERNAME, password: process.env.DRUPAL_PASSWORD, }, })
// Methodconst articles = await drupal.getResourceCollection("node--article", { withAuth: { username: process.env.DRUPAL_USERNAME, password: process.env.DRUPAL_PASSWORD, },})
回调函数
您还可以提供自定义的认证回调函数。回调函数必须返回一个与 Authorization
兼容的头部信息。
// Clientexport const drupal = new DrupalClient( process.env.NEXT_PUBLIC_DRUPAL_BASE_URL, { auth: () => { // Do something and return an Authorization header. }, })
// Methodconst users = await drupal.getResourceCollection("user--user", { withAuth: () => { // Do something and return an Authorization header. },})
访问令牌
您也可以传入访问令牌。
// Clientexport const drupal = new DrupalClient( process.env.NEXT_PUBLIC_DRUPAL_BASE_URL, { auth: { access_token: "ECYM594IlARGc3S8KgBHvTpki0rDtWx6...", token_type: "Bearer", expires_in: 3600, }, })
// Methodconst articles = await drupal.getResourceCollection("node--article", { withAuth: { access_token: "ECYM594IlARGc3S8KgBHvTpki0rDtWx6...", token_type: "Bearer", expires_in: 3600, },})
NextAuth
如果您正在使用 NextAuth,您可以使用 getSession
返回的结果。
import { getSession } from "next-auth/react"
const session = getSession(...)
// Clientexport const drupal = new DrupalClient( process.env.NEXT_PUBLIC_DRUPAL_BASE_URL, { auth: session.accessToken, })
// Methodconst articles = await drupal.getResourceCollection("node--article", { withAuth: session.accessToken,})