采石场 / 客户-UUID
为 Magento 2 添加新 UUID 属性的客户模块
1.0.4
2024-01-04 19:05 UTC
Requires
- php: ^8.0
- magento/module-customer: ^103.0.6-p2
- ramsey/uuid: ~4.7.4
This package is auto-updated.
Last update: 2024-09-04 20:37:19 UTC
README
目标
此 Magento 2 扩展为顾客引入了一个新的只读属性 uuid
。该扩展确保每个客户的 UUID 的唯一性,并自动将其分配给现有和新的客户。该 uuid
属性通过公共 GraphQl API 对认证用户开放,并在客户网格中显示。
主要功能和实现细节
- 该扩展使用 UUID 版本 4,符合 Magento 的最佳实践。UUID 版本 4 由于其依赖于随机值,具有非常高的唯一性概率。
- 该扩展使用 Magento 2 的插件架构,以拦截客户保存和更新操作。在此拦截期间,将分配新的 UUID,并重新验证现有的 UUID。
- 安装后,该扩展使用 Magento 的数据补丁自动为所有现有客户分配 UUID。
- 扩展安装后,创建的所有新客户在将客户记录提交到数据库之前都会自动分配一个 UUID。
- 在分配 UUID 之前,该扩展确保同一 UUID 不会分配给其他客户。
- 为了强制执行数据完整性,每当客户记录发生更改时(无论是从管理面板还是店面),该扩展都会重新验证客户的现有 UUID。如果分配的 UUID 无效,则生成、验证并分配新的 UUID。同时,在管理面板和店面也会显示 UI 通知。
- UUID 在客户网格中显示,为只读且可过滤、可搜索和可排序。
- 认证用户可以通过 GraphQl API 读取 UUID
- 扩展将所有 UUID 交易记录到日志文件。
Magento 兼容性
该扩展已在未安装任何其他第三方扩展的 Magento 2 版本 2.4.6-p2
上开发和测试。
设置测试环境
此 docker-compose.yml 可用于快速启动一个本地测试环境,其中包括已安装的 Magento 2.4.6-p2、mariadb 和 elastic search。下载 docker-compose.yml
文件后,可以使用 docker-compose up -d
下载 docker 镜像并设置容器和卷。
扩展安装前的推荐步骤
- 确保 Magento 安装中已创建一些客户。这将允许扩展在安装期间自动分配 UUID。
- 扩展将所有 UUID 交易记录到
<magento_root>/var/log/quarry_customeruuid.log
。请确保此日志文件具有写权限。如果没有,则扩展将回退到 PHP 的系统记录器。 - 启用 Magento 的开发者模式
bin/magento deploy:mode:set developer
- 禁用 Magento 的缓存
bin/magento cache:disable
扩展安装过程
- 使用 composer 安装扩展
composer require quarry/customer-uuid
- 刷新 Magento 的缓存
bin/magento cache:flush
- 清理 Magento 的缓存
bin/magento cache:clean
- 启用 UUID 扩展
bin/magento module:enable Quarry_CustomerUuid
- 运行 Magento 设置升级
bin/magento setup:upgrade
- 运行 di 编译
bin/magento setup:di:compile
验证扩展安装
1. 在扩展安装期间,现有客户会自动分配 UUID。
预期结果
- 客户网格应显示一个新列,标签为
UUID
,并为所有现有客户分配 UUID。 - 这些只读UUID必须在客户网格中可筛选、可搜索和可排序。
- 日志文件应显示所有现有客户ID,以及已分配新UUID的客户。日志条目信息应采用以下格式
[2024-01-04T18:30:41.104753+00:00] logger.WARNING: UUID <uuid_code> changed for customer ID <customer_id>
2. 从管理员面板创建的新客户,将自动分配UUID
预期结果
- 新客户记录必须在客户网格中显示,并分配UUID。
- 日志文件应包含此事务的条目。日志条目信息应采用以下格式
[2024-01-04T18:37:06.483549+00:00] logger.INFO: UUID <uuid_code> assigned to new customer ID
2. 从店面创建的新客户,将自动分配UUID
预期结果
- 新客户记录应在管理员客户网格中显示,并分配UUID。
- 日志文件应包含此事务的条目。日志条目信息应采用以下格式
[2024-01-04T18:37:06.483549+00:00] logger.INFO: UUID <uuid_code> assigned to new customer ID
3. UUID可通过GraphQl API供认证用户访问。
对于认证用户,UUID可通过Customer对象上的GraphQL API访问。Magento的GraphQl端点是/graphql
,可通过http://<your-domain.com>/graphql
访问。建议使用Postman等GraphQl客户端访问此端点。
首先,需要通过调用GenerateCustomerToken
突变来获取一个Bearer token。示例
mutation GenerateCustomerToken {
generateCustomerToken(email: "yourname@yourdomain.com", password: "yourpass") {
token
}
}
接下来,必须将此认证令牌与GraphQl查询一起传递以检索UUID。检索UUID的示例GraphQl查询
query Customer {
customer {
uuid
}
}
以下是上述GraphQl查询的示例响应
{
"data": {
"customer": {
"uuid": "8d56ce70-5ec1-4eaa-91f8-5cee9bb72d90"
}
}
}
扩展卸载过程
- 禁用UUID扩展
bin/magento module:disable Quarry_CustomerUuid
- 卸载UUID扩展
bin/magento module:uninstall --non-composer Quarry_CustomerUuid
- 使用composer删除扩展
composer remove quarry/customer-uuid
- 刷新 Magento 的缓存
bin/magento cache:flush
- 清理 Magento 的缓存
bin/magento cache:clean
- 运行 Magento 设置升级
bin/magento setup:upgrade
- 运行 di 编译
bin/magento setup:di:compile