remp / crm-wordpress-module
CRM WordPress 模块
Requires
- php: ^8.0
This package is auto-updated.
Last update: 2024-09-26 19:03:50 UTC
README
用户身份验证
CRM 支持对配置的 WordPress 实例进行用户身份验证。要启用此功能,
安装
-
安装我们的 WordPress 插件,该插件公开 API 以验证凭据。
-
在 CRM 管理设置中配置 WordPress CMS URL 和 WordPress 认证令牌(/admin/config-admin - 集成)
-
在您的模块中注册认证器
class DemoModule extends \Crm\ApplicationModule\CrmModule { // ... public function registerAuthenticators(\Crm\ApplicationModule\Authenticator\AuthenticatorManagerInterface $authenticatorManager) { $authenticatorManager->registerAuthenticator( $this->getInstance(\Crm\WordpressModule\Authenticator\WordpressAuthenticator::class), 100 ); } // ... }
启用后,每次用户尝试登录时,将发生以下操作
- 首先 CRM 将使用默认的认证器集,优先级更高。其中之一是尝试登录本地
users
表。 - 如果所有优先级更高的认证器都失败,CRM 将尝试使用
WordpressAuthenticator
并验证您配置的 WordPress 实例的凭据。 - 如果成功,CRM 将在本地创建用户并设置与用户刚刚在 WordPress 中验证相同的密码,因此 CRM 能够在将来验证密码。
我们建议只在过渡期(几个月)内启用此认证器。禁用时,在过渡期内未进行身份验证的用户将不得不创建账户/重置密码(具体取决于您是否在迁移用户之前迁移了用户)。
配置
当 WordpressAuthenticator
在 CRM 中创建新用户时,它会设置在 WordPress 中验证的密码,以便人们可以使用相同的密码登录 CRM。
然而,如果账户已在 CRM 中存在并且密码不同,WordpressAuthenticator
默认情况下不会更改用户的密码。如果您希望为现有的 CRM 账户设置已验证的 WordPress 密码,请将以下代码片段添加到您的 app/config/config.neon
中。
# enable WordressModule extension extensions: wordpress: Crm\WordpressModule\DI\WordpressModuleExtension wordpress: # configure authenticator authenticator: passwordReset: true
安全性和用户迁移
默认情况下,同时拥有两个用户基础并不是一个好主意,我们建议 CRM 成为您的首选真实来源。这样您可以防止账户劫持和其他与多个身份验证机制相关的漏洞。我们已经想到了两个可以帮助您迁移的场景。
先迁移,后验证
为了防止任何类型的歧义,WordPress 和 CRM 用户都应相互连接。实现这一点的最佳方法是首先迁移/同步 WP 用户到 CRM - 请参阅下面的 同步用户 API 端点。
如果您不期望用户来自任何其他来源,您可以通过 users.ext_id
列创建硬链接。 WordpressModule
可以为您处理此操作,只需在您的 app/config/config.neon
中配置以下标志。否则,wordpress_users
表和 users
表之间将只有软链接。
# enable WordressModule extension extensions: wordpress: Crm\WordpressModule\DI\WordpressModuleExtension wordpress: # enable ext ID referencing extIdReferencing: true
API 文档
所有示例都使用 http://crm.press
作为基础域名。请在执行示例之前将主机更改为您使用的域名。
所有示例都使用 XXX
作为授权令牌的默认值,请用实际令牌替换。
- API令牌。用于服务器之间通信的标准API密钥。它代表整个调用应用程序。可以在CRM管理员界面中生成(
/api/api-tokens-admin/
),并且每个API密钥都必须在白名单中才能访问特定的API端点。默认情况下,API密钥无法访问任何端点。
API响应可以包含以下HTTP状态码
如果可能,响应将包含带有解释错误信息的application/json
编码负载。
GET /api/v1/wordpress/sync-user
API调用根据从WordPress提供的信息在CRM中创建/更新用户。以下为处理场景
- 如果用户在CRM中不存在,则创建并链接到WordPress用户。
- 如果用户已存在于CRM中,并且提供的WordPress ID与CRM中链接的ID匹配,则更新用户。
- 如果用户已存在于CRM中,但提供的WordPress ID不匹配或未在CRM用户中设置,则API返回HTTP 409冲突。
头部信息
负载
{ "wordpress_id": 123, // required; ID of user in Wordpress. "email": "admin@example.com", // required; Email of user in Wordpress. "registered_at": "2020-03-13T14:02:44+00:00", // required; RFC3339-formatted time of user registration in Wordpress. "user_login": "admin", // required; Login of user in Wordpress . "user_nicename": "admin", // optional; Nicename of user in Wordpress. "user_url": "http://www.example.com", // optional; User's URL in Wordpress . "display_name": "Example Admin", // optional; Display name of user in Wordpress. "first_name": "Example", // optional; First name of user in Wordpress "last_name": "Admin" // optional; Last name of user in Wordpress }
示例
curl -request POST 'http://crm.press/api/v1/wordpress/sync-user' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer XXX' \ --data-raw '{ "wordpress_id": 145, "email": "admin@example.fu", "registered_at": "2020-03-13T14:02:44+00:00", "user_login": "admin", "user_nicename": "admin", "user_url": "http://www.example.com", "display_name": "Example Admin", "first_name": "Example", "last_name": "vcvc" }'
响应
{ "user_id": 374513, "wordpress_id": 145, "email": "admin@example.fu", "login": "admin", "registered_at": "2020-03-13T14:02:44+01:00", "nicename": "admin", "url": "http://www.example.com", "display_name": "Example Admin", "first_name": "Example", "last_name": "vcvc" }