关于UCenter独立部署及多站点互通的问题,您可以参考以下技术方案:
- 请确保UCenter版本与Discuz! X版本兼容(建议UCenter 1.7 + Discuz! X3.5)
- 独立UCenter应单独配置数据库,建议采用表前缀分离(如uc_)
在Discuz! X安装阶段:
- // config_ucenter.php 需手动配置
- define('UC_CONNECT', 'mysql');
- define('UC_DBHOST', '独立数据库地址');
- define('UC_DBUSER', '数据库用户');
- define('UC_DBPW', '密码');
- define('UC_DBNAME', '数据库名');
- define('UC_DBCHARSET', 'utf8mb4');
- define('UC_DBTABLEPRE', '`uc_dbname`.uc_');
- define('UC_KEY', '需与UCenter后台一致');
- define('UC_API', 'http://ucenter.domain.com');
- define('UC_APPID', '需对应UCenter后台应用ID');
复制代码
- 在UCenter后台 » 应用管理 » 添加新应用时:
- 应用类型选择「其他」
- 接口URL填写完整站点地址(含http/https)
- 通信密钥需与Discuz! config_ucenter.php中UC_KEY严格一致
- 开启同步登录/注册功能
① 检查双方通信密钥的字符顺序和大小写
② 验证UCenter后台与应用配置的IP地址白名单
③ 使用通信检测工具(需自行开发):
- // 检测脚本示例
- $uc = new ucclient();
- $status = $uc->test_api(UC_API, UC_APPID, UC_KEY);
- if($status['code'] != 1) {
- die("通信失败:".$status['message']);
- }
复制代码
┌──────────────┐
│ Master UCenter │
└──────┬───────┘
├─ Discuz! A
├─ Discuz! B
└─ 其他应用
在/include/uc_client/client.php中可扩展:
- // 增加多应用同步队列
- class my_uc_client extends ucclient {
- public function _send($data) {
- // 添加异步队列处理
- queue::push('ucenter_sync', $data);
- return parent::_send($data);
- }
- }
复制代码
- 为每个应用单独生成RSA密钥对
- 在UCenter后台设置IP访问限制
- 定期轮换UC_KEY(需同步所有应用配置)
在source/class/ucenter/uc.php中扩展:
- function synlogin() {
- // 原始代码...
- // 增加多站点cookie设置
- foreach($sites as $domain) {
- dsetcookie('auth', $auth, 86400, 1, $domain);
- }
- }
复制代码
如需更深入的定制开发方案,建议访问DZ插件网技术文档区获取SDK和开发模板。实际部署时请注意做好数据备份,建议在测试环境验证通过后再进行生产环境部署。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |