创建 OAuth 客户端

设置一个 OAuth 客户端,用于身份验证内容。


在创建 OAuth 消费者之前,我们需要为 OAuth 范围创建一个新角色和一个用户。

next-drupal 1.5 开始,用户角色用于 OAuth 范围。基于当前登录的用户,范围将自动处理预览。


1. 创建角色

  1. 访问 /admin/people/roles
  2. 点击**+ 添加角色**。
  3. 填写**角色名称**。例如:Next.js 站点

2. 分配权限

接下来,将以下权限分配给新创建的角色。

  • 绕过内容访问控制
  • 发出子请求
  • 查看用户信息

我们分配绕过内容访问控制权限是为了允许 Next.js 访问未发布的内容和修订版本。

此范围仅在从 Next.js 向 Drupal 发出身份验证请求时使用。

const articles = await drupal.getResource(
"node--article",
"dad82fe9-f2b7-463e-8c5f-02f73018d6cb",
{
withAuth: true,
}
)

3. 创建用户

/admin/people/create 添加新用户,并**将所有将用于范围的角色分配给他们,包括管理员角色和我们上面创建的角色**。


4. 生成密钥

生成一对密钥来加密令牌。出于安全考虑,请将它们存储在文档根目录之外(web 目录)。

  1. 访问 /admin/config/people/simple_oauth
  2. 点击**生成密钥**为令牌生成加密密钥
  3. 填写**密钥目录**。例如,一个相对路径,如 ../
  4. 点击**生成**
  5. 点击**保存配置**

您也可以使用 openssl 在您上面使用的目录中生成密钥

openssl genrsa -out private.key 2048 openssl rsa -in private.key -pubout > public.key

5. 创建消费者

  1. 访问/admin/config/services/consumer/add
  2. 填写以下值
  • **标签**:Next.js 站点
  • **用户**:选择我们创建的用户
  • **密钥**:您的密钥
  • **范围**:选择我们创建的角色
  1. 点击**保存**

重要:请注意客户端 ID(uuid)和密钥。这些将用作 Next.js 站点的环境变量。


6. 连接 Drupal

要将 Next.js 项目连接到 Drupal,我们使用环境变量

在您的 .env.local 文件中填写以下变量。

.env.local

# Authentication (Bearer)
DRUPAL_CLIENT_ID=
DRUPAL_CLIENT_SECRET=

7. 更新 DrupalClient

更新 DrupalClient 以使用Bearer 身份验证标头。

lib/drupal.ts

import { DrupalClient } from "next-drupal"
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,
},
}
)