logo

Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll
03/09/2025, by Ivan

基本身份验证是一种非常简单直接的身份验证方法。客户端发送带有 Authorization 头的 HTTP 请求,该头包含 Drupal 站点的 base64 编码用户名和密码。

在基本身份验证中,miniOrange API Authentication 模块会首先根据用户的 Drupal 用户名和密码进行身份验证。如果用户通过身份验证,则该用户才可以执行该操作。该模块兼容 Drupal 7、Drupal 8、Drupal 9、Drupal 10 和 Drupal 11。
 

03/09/2025, by Ivan

API 密钥认证是保护 Drupal REST API 最简单的方法之一。一旦你为所有用户生成了 API 密钥,就可以使用这些密钥来保护对 Drupal REST API 的访问。

你可以在每个 API 请求的 Authorization 头中发送用户的 Drupal 用户名和 API 密钥来实现。Drupal API Authentication 模块将会根据用户名和对应的 API 密钥来验证请求。该模块兼容 Drupal 7、Drupal 8、Drupal 9、Drupal 10 和 Drupal 11。

02/09/2025, by Ivan

OAuth(开放授权)是一种基于令牌的身份验证和授权协议的开放标准,可用于提供单点登录(SSO)。OAuth 允许第三方服务(例如 Facebook 等)在不暴露用户密码的情况下使用最终用户帐户的特定信息。它作为最终用户的中介,向服务提供一个访问令牌,从而授权共享特定的帐户信息。

此 Drupal API 身份验证方法使用 OAuth 2.0 协议获取安全访问令牌。该令牌用于验证对您的 Drupal 站点 API 的访问。OAuth 方法提供高度加密和安全的访问令牌,确保您的 Drupal API 得到良好保护。它被认为是防止对 Drupal REST 或 JSONAPI 端点未经授权访问的最安全方法之一。该模块兼容 Drupal 7、Drupal 8、Drupal 9、Drupal 10 和 Drupal 11。

02/09/2025, by Ivan

Drupal API Authentication 模块通过在 API 请求中发送 JWT 令牌来进行身份验证。该模块使用 JSON Web Token (JWT),这是一种在双方交互中安全表示用户身份的开放标准。

在此步骤中,本质上会使用您的 Drupal 网站的用户名和密码来获取一个 JWT 令牌。一旦用户名和密码验证成功,Drupal REST API Authentication 模块将创建一个已签名的 JSON Web Token。然后,API 会将该令牌返回给客户端应用程序。

一旦您收到 JWT 令牌,就可以使用该令牌在 Drupal 中执行操作,直到 JWT 令牌过期。Drupal REST API Authentication 模块仅在接收到来自应用程序的有效 JWT 时才会授予访问权限。

JWT 可以使用两种算法进行签名和验证 —— HSA 和 RSA。

让我们看看如何在 Drupal 中使用 JWT 令牌进行 API 身份验证。

02/09/2025, by Ivan

如果你希望使用身份提供者来保护/限制对 Drupal REST API 的访问,那么应该使用外部身份提供者身份验证方法。

使用外部身份提供者进行 Drupal API 身份验证的方式,是通过第三方提供者(如 Google、Azure AD、Keycloak、Okta、Gitlab 等)获取的访问令牌来安全访问 Drupal 的 REST API。

在这种方法中,你需要在模块配置中设置身份提供者的 User Info Endpoint 和用户名属性。之后,你就可以使用该提供者颁发的令牌对所有 Drupal API 请求进行认证。Drupal REST API 模块会将接收到的用户凭据与 Drupal 用户账户进行匹配验证。该模块兼容 Drupal 7、8、9、10 和 11。

点击下载

02/09/2025, by Ivan

使用 JSON:API 进行 CRUD 操作的身份验证

在与 JSON:API 交互时,可使用 Postman 或 cURL 等工具发送请求。默认情况下,这些请求会被视为来自“匿名用户”,因为这些工具本身并不处理身份认证。因此,根据你在 Drupal 站点中为匿名用户配置的权限,可能无法访问某些资源。

但如果你的目标是通过 JSON:API 执行创建、更新或删除(CRUD)操作,仅依赖匿名访问是远远不够的。这些操作需要经过身份验证的访问。Drupal 支持多种身份验证方式,可通过核心或贡献模块启用。

最常用的一种方式是 HTTP Basic Authentication,它包含在 Drupal 核心中。对于更高级的用例,也可以使用 Drupal REST & JSON API Authentication 模块,它提供了更强大的身份验证功能和自定义选项,便于你根据应用需求调整安全模型。

进行认证请求的步骤

02/09/2025, by Ivan

我们经常会遇到 500 错误页面,尤其当 Drupal、服务或其他站点不可用时。出现 500(或 501-504)错误页面时,Drupal 会通过异常(Exceptions)来处理关键代码错误。例如在向其他网站发起 HTTP 请求时发生错误,Drupal 会显示类似如下的错误信息:“网站遇到意外错误,请稍后再试”:

Drupal 默认 500 错误页面
Drupal 默认 500 错误页面

在你的网站上出现 WSOD(白屏死机)并不好,因此我们来优化这个页面,改为展示一个有样式的 HTML 页面。

02/09/2025, by Ivan

有时你需要在站点上设置固定的、永久性的分类(Categories),这些分类不应被意外修改。在这种情况下,你可以利用自定义代码和事件订阅器(Event Subscriber)来实现。

我们将在自定义模块中添加一个新的 Event Subscriber 类。

drupalbook_custom.services.yml

services:  
  drupalbook_custom.tag_redirect_subscriber:
    class: Drupal\drupalbook_custom\EventSubscriber\TagRedirectSubscriber
    arguments:
      - '@entity_type.manager'
      - '@current_user'
    tags:
      - { name: event_subscriber }

然后在 drupalbook_custom/src/EventSubscriber/TagRedirectSubscriber 中添加我们的事件订阅器类:

02/09/2025, by Ivan

PHP 8 引入了 构造函数属性提升(constructor property promotion)功能,它通过允许你在构造函数签名中声明和初始化属性,从而简化了类属性的定义与赋值过程。本教程演示了如何在 Drupal 自定义模块中使用构造函数属性提升(需要 PHP 8.0 及以上),特别是用于简化服务和控制器中的依赖注入。我们将对比传统的 Drupal 模式(用于 PHP 7 和早期的 Drupal 9)与现代的 PHP 8+ 方法,分别提供完整代码示例。最终,你将看到这种现代语法如何减少样板代码,使代码更清晰,并符合当前最佳实践。

Drupal 10(需要 PHP 8.1+)核心已经开始采用这些现代 PHP 特性,因此鼓励自定义模块开发者也这样做。我们先来回顾 Drupal 中传统的依赖注入模式,然后使用构造函数属性提升进行重构。

Drupal 中的传统依赖注入方式(PHP 8 之前)

在 Drupal 的服务和控制器中,传统依赖注入模式包括三个步骤: