第一步:准备工作
在开始之前,请确保你已经准备好以下环境:
- 一个可用的 Web 服务器环境:如 Apache 或 Nginx,并已配置好 PHP 和 MySQL。
- 已安装并可以正常访问的 DedeCMS:建议使用与 UCenter 版本兼容的 DedeCMS 版本(如 DedeCMS V5.7/V5.8 等,较新的版本通常已内置 UCenter 整合功能)。
- UCenter 安装包:可以从 Discuz! 官方网站下载,它是一个独立的应用程序。
- 一个空的 MySQL 数据库:用于存放 UCenter 的数据。
第二步:安装 UCenter
- 上传文件:将下载的 UCenter 压缩包解压,并将
upload目录下的所有文件通过 FTP 上传到你的网站根目录或一个子目录(/uc_server/)。 - 创建数据库:在你的 MySQL 中为 UCenter 创建一个新的数据库,
ucenter_db。 - 运行安装程序:通过浏览器访问 UCenter 的安装地址,通常是
http://你的域名/uc_server/。 - 填写数据库信息:
- 数据库服务器:
localhost或你的数据库地址。 - 数据库用户名:你的数据库用户名。
- 数据库密码:你的数据库密码。
- 数据库名:
ucenter_db(你刚创建的数据库名)。 - 数据库表前缀:可以使用默认的
uc_。
- 数据库服务器:
- 设置管理员信息:填写 UCenter 的管理员用户名和密码。
- 完成安装:点击“开始安装”,安装成功后会自动跳转到 UCenter 的管理后台登录页面。
安装后务必:
- 删除
install/目录:出于安全考虑,安装成功后请立即删除 UCenter 根目录下的install/文件夹。 - 记录 UCenter 信息:在安装的最后一步,会显示一个配置信息文件(
config.inc.php。请务必复制并保存好这些信息,下一步整合 DedeCMS 时需要用到。
第三步:整合 DedeCMS 到 UCenter
我们将 DedeCMS 应用添加到 UCenter 中,并配置 DedeCMS 使其与 UCenter 通信。
在 UCenter 中添加新应用 (DedeCMS)
- 登录 UCenter 后台:访问
http://你的域名/uc_server/并用管理员账号登录。 - 进入应用管理:在左侧菜单中找到 “应用管理” -> “添加新应用”。
- 填写应用信息:
- 应用名称:填写
DedeCMS或你喜欢的名称。 - 应用主 URL:填写你的 DedeCMS 网站的完整地址,
http://你的域名/。 - 应用 IP:通常留空或填写
0.0.1。 - 应用目录:填写 DedeCMS 在你服务器上的相对路径, (DedeCMS 在根目录)。
- 通信密钥:这是最重要的部分! UCenter 会自动生成一个密钥,请复制这个密钥,后面配置 DedeCMS 时需要完全一致。
- 开启应用:勾选“开启应用”。
- 应用类型:选择 “其他”。
- 接口文件目录:填写
api。
- 应用名称:填写
- 提交:点击提交,UCenter 会自动创建 DedeCMS 应用所需的数据库表。
修改 DedeCMS 配置文件
-
找到配置文件:在你的 DedeCMS 根目录下,找到
uc_client/config.inc.php文件,如果这个文件不存在,你可以从 UCenter 的uc_client目录中复制一个config.inc.php文件模板过来。 -
编辑配置文件:用文本编辑器打开
config.inc.php,并根据 UCenter 中显示的信息进行修改:<?php /** * UCenter 应用配置文件 * 请根据你的应用信息修改以下配置 */ // UCenter 数据库信息 define('UC_DBHOST', 'localhost'); // UCenter 数据库主机 define('UC_DBUSER', 'ucenter_db_user'); // UCenter 数据库用户名 define('UC_DBPW', 'your_uc_password'); // UCenter 数据库密码 define('UC_DBNAME', 'ucenter_db'); // UCenter 数据库名 define('UC_DBTABLEPRE', 'uc_'); // UCenter 数据库表前缀 define('UC_DBCHARSET', 'utf8'); // UCenter 数据库字符集 // UCenter 通信密钥 (必须与 UCenter 后台设置的完全一致) define('UC_KEY', '这里填写你在UCenter后台生成的通信密钥'); // UCenter 的 URL 地址 define('UC_API', 'http://你的域名/uc_server/'); // UCenter 的 URL,确保以 / // UCenter 的 IP 地址 (可选) define('UC_IP', ''); // 是否启用 UCenter 的同步登录功能 (强烈建议开启) define('UC_CONNECT', 'mysql'); // 连接方式,通常为 'mysql' define('UC_CHARSET', 'utf-8'); // DedeCMS 的字符集,必须与 UCenter 一致 define('UC_PPP', '20'); // 每次同步登录/登出请求的用户数 // DedeCMS 在 UCenter 中的应用 ID (非常重要!) // 这个 ID 是你在 UCenter 后台添加 DedeCMS 应用后,系统自动分配的。 // 你可以在 UCenter 后台“应用管理”中找到这个 ID。 define('UC_APPID', '1'); // <--- 修改为你的 DedeCMS 在 UCenter 中的 ID // DedeCMS 的 URL define('UC_MYURL', 'http://你的域名/'); // DedeCMS 的通信文件目录 define('UC_API_TYPE', '2'); // 接口类型,2 代表模拟 GET ?>关键点:
UC_KEY:必须和 UCenter 中生成的完全一样。UC_APPID:这是 DedeCMS 在 UCenter 中的“身份证号”,务必正确,你可以在 UCenter 后台的“应用管理”里找到对应的 ID。UC_API:确保 UCenter 的 URL 正确无误。
第四步:修改 DedeCMS 文件
这一步是让 DedeCMS 的用户模块去调用 UCenter 的接口,核心是修改用户登录、注册和相关的处理文件。
-
备份文件:在修改任何文件之前,务必备份原始文件!
-
修改用户登录文件 (
member/index.php):-
找到处理登录逻辑的代码段,通常在
else if ($dopost == 'login')附近。 -
将原来直接查询
dede_member表的代码,替换为调用 UClient 的登录接口uc_user_login()。 -
示例修改逻辑:
// 原来的代码类似这样 // $row = $dsql->GetOne("SELECT * FROM `dede_member` WHERE userid='$userid' AND pwd='$pwd'"); // 修改为调用 UCenter require_once(DEDEINC.'/uc_client/client.php'); list($uid, $username, $password, $email) = uc_user_login($userid, $pwd); if($uid > 0) { // 登录成功,处理 DedeCMS 的会话和状态 // ... 此处省略 DedeCMS 的登录成功处理代码 ... // 通常包括更新登录时间、IP,设置 Cookie 等 } else { // 登录失败 ShowMsg('登录失败,用户名或密码错误!', '-1'); exit(); }
-
-
修改用户注册文件 (
member/regnew.php):-
找到处理注册逻辑的代码段。
-
将原来直接向
dede_member表插入数据的代码,替换为调用 UCenter 的注册接口uc_user_register()。 -
示例修改逻辑:
// 原来的代码类似这样 // $sql = "INSERT INTO `dede_member` ( ... ) VALUES ( ... )"; // 修改为调用 UCenter require_once(DEDEINC.'/uc_client/client.php'); $uid = uc_user_register($username, $password, $email); if($uid > 0) { // 注册成功,处理 DedeCMS 的后续操作,比如自动登录 // ... 此处省略 DedeCMS 的注册成功处理代码 ... } elseif($uid == -1) { ShowMsg('用户名不合法', '-1'); } elseif($uid == -2) { ShowMsg('包含要允许注册的词语', '-1'); } elseif($uid == -3) { ShowMsg('用户名已经存在', '-1'); } elseif($uid == -4) { ShowMsg('Email 格式有误', '-1'); } elseif($uid == -5) { ShowMsg('Email 不允许注册', '-1'); } elseif($uid == -6) { ShowMsg('该 Email 已经被注册', '-1'); } else { ShowMsg('未知错误', '-1'); } exit();
-
-
修改用户信息同步文件 (
member/editinfo.php等):- 当用户在 DedeCMS 修改密码、邮箱等信息时,需要同步更新到 UCenter。
- 调用
uc_user_edit()接口。
-
实现同步登录:
- 在用户登录 DedeCMS 成功后,需要调用
uc_user_synlogin($uid)来通知 UCenter 生成同步登录的 Cookie,其他应用(如 Discuz!)检测到这个 Cookie 后,就会自动登录。 - 在
member/index.php登录成功后的代码块中加入:require_once(DEDEINC.'/uc_client/client.php'); uc_user_synlogin($uid);
- 同样,在用户登出时,需要调用
uc_user_synlogout():require_once(DEDEINC.'/uc_client/client.php'); uc_user_synlogout();
- 在用户登录 DedeCMS 成功后,需要调用
第五步:测试与验证
- 清除缓存:清空 DedeCMS 的缓存目录 (
/data/cache/)。 - 测试注册:访问 DedeCMS 的注册页面,尝试注册一个新用户,注册成功后,检查 UCenter 后台的“用户管理”,看新用户是否已成功添加。
- 测试登录:在 DedeCMS 上用新注册的账号登录,检查是否能正常登录。
- 测试同步登录:如果你同时安装了另一个应用(如 Discuz!),在 DedeCMS 登录后,直接访问 Discuz! 的论坛,看是否已经自动登录,反之亦然。
- 测试信息同步:在 DedeCMS 修改用户密码或邮箱,然后检查 UCenter 中的用户信息是否已更新。
常见问题与注意事项
- 通信密钥不匹配:这是最常见的问题,请仔细检查
config.inc.php中的UC_KEY是否与 UCenter 后台设置的完全一致。 - UC_APPID 错误:确保
config.inc.php中的UC_APPID是正确的,这个 ID 是 UCenter 分配给 DedeCMS 的,不是随便填写的。 - 文件路径错误:确保
uc_client目录位于 DedeCMS 的正确位置,config.inc.php文件路径正确。 - 数据库连接问题:确保
config.inc.php中的数据库信息(主机、用户名、密码、数据库名)正确无误。 - 字符集问题:确保 DedeCMS 和 UCenter 的数据库字符集一致(通常是
utf8)。 - 代码修改不完整:如果你只修改了登录,但没有修改注册,或者没有实现同步登录,那么系统就会出现各种奇怪的问题,请务必按照步骤完整修改所有相关文件。
- 使用现成的整合插件:对于不熟悉代码修改的用户,可以搜索 DedeCMS 官方论坛或第三方网站,寻找已经制作好的 UCenter 整合插件,上传安装即可,会更加方便和安全。
通过以上步骤,你就可以成功地将 DedeCMS 与 UCenter 整合起来,实现用户数据的统一管理,这个过程虽然繁琐,但一旦完成,将为你的多站点应用管理带来极大的便利。
