一、前言:
因为移动互联网的迅速发展,各大互联网厂商都推出了小程序,再加上原有的APP、web等项目,用户数据被严重割裂。为了统一用户数据、优化用户体验:实现一个账号多平台登录、数据互通,迫切需要一个用户中心来管理各平台的用户。又因为平台用户数不多,且有discuz背景,所以用ThinkPHP整合十年前的UCenter
,引出各种用户操作的API,就成了最佳选择。
而笔者在查找资料时,大多是thinkphp3.2与UCenter的整合文章,且描述的不是很清楚,故写此文记录合并过程,希望可以对有相同需求的人提供一点帮助。
二、UCenter 的基本功能
- 账号管理:包括注册、登录、删除、修改用户信息(密码、邮箱等)
- 头像管理:上传、删除,生成调用头像的链接,头像类别(真实头像、虚拟头像两种)
注:UCenter开发文档上没说
真实头像
和虚拟头像
的区别,笔者姑且认为虚拟头像
就是我们平时的头像,而真实头像
就是用户个人的照片。
- 短消息管理:发送、删除短消息等。
注:本功能
优点
是可以实现用户跨平台交流,缺点
是不能向IM(即时通讯软件)
那样快速,而且原生不支持发送图片等媒体消息。
- 好友管理:添加、删除好友,获取好友列表等
- 其他功能:应用接口、积分接口、标签接口、事件接口和邮箱接口等不在本次开发范围之列,故不做讨论。
三、准备工作
-
安装
ThinkPHP5.1
安装步骤详见 ThinkPHP5.1完全开发手册
-
下载GitHub上
@hyperzlib
的 thinkphp5 UCenter 接口 -
一个
UCenter
- 安装方法及兼容PHP7网上有很多教程,这里就不赘述了
- 笔者以discuz x3.4自带的UCenter为例,独立的UCenter整合方法也一样
四、整合
4.1 UCenter 中添加应用程序
-
点击首页
应用管理
进入应用管理界面
-
点击
添加新应用
开始添加应用
-
开始添加应用
- 安装方式:自定义安装
- 应用类型:其他
- 应用名称:你的应用名称
- 应用主URL:暂时写要整合的thinkphp站点的域名(稍后会修改)
- 应用ip:一般不填
- 通信密钥:可不填(不填会自动生成)
- 是否开启同步登录:是
- 是否接受通知:是
- 其他选项默认即可
- 点击
提交
-
添加成功
4.2 整合 ThinkPHP5.1 与 GitHub 的代码
-
将下载的代码中的UCenter目录复制到thinkphp的扩展目录extend目录下
-
修改配置文件
-
进入
UCenter
->应用管理
->刚刚添加的那一项应用
->编辑
-
复制配置信息
-
将配置信息粘贴到
thinkphp根目录/extend/UCenter/config.php
中覆盖保存
-
-
thinkphp 中新建一个模块准备和UCenter通信
-
新建一个控制器
php think make:controller [模块名称]/[控制器名称]
笔者创建的模块是
uc
控制器名称是UCenter
-
创建一个模型
php think make:model [模块名称]/[模型名称]
笔者使用的模块是
uc
模型名称是UCenter
-
-
修改新创建的控制器和模型
-
修改新创建的控制器
-
控制器继承
UCenter\Controller\ApiController
类 -
覆盖公共属性
$eventListener
public $eventListener = [刚刚创建的模型];
-
-
修改新创建的模型
继承UCenter\Model\EventModel
类
-
-
配置路由
-
开启系统强制路由
打开thinkphp根目录/config/app.php
// 将 'url_lazy_route' => false, // 改为 'url_lazy_route' => true,
本步骤不是必须执行,只是为了系统安全而配置,
-
为 UCenter能与thinkphp通信配置访问路由
打开文件thinkphp根目录/route/route.php
新增一条路由信息// 新增一条路由信息 Route::get('uc', 'uc/UCenter/uc');
-
-
修改下载的代码使之兼容thinkphp5.1
-
修改文件
tinkphp根目录/extend/UCenter/Controller/ApiController.php
将第五行use think\App;
改为use think\facade\Log;
thinkphp5.1取消了静态方法,故采用facade兼容
-
修改文件
tinkphp根目录/extend/UCenter/Controller/UcController.php
-
将命名空间改为
UCenter\Controller
-
将类的继承由
BaseController
改为Controller
这部分应该是作者没有改 tp3.2版本的代码,直接搬过去,从而没有做对tp5版本的兼容
-
-
修改文件
tinkphp根目录/extend/UCenter/Api.php
- 在14行添加
require_once(__DIR__.'/config.php');
- 将16行处
E('未发现ucnter配置文件');
改为exception('未发现ucnter配置文件');
- 在14行添加
> tp5抛弃了tp3.2的单字母助手函数,所以要作此修改来兼容tp5.1
-
4.3 修改UCenter应用信息
因为在创建应用时thinkphp并没有配置完成,也没有路由信息,所以现在要编辑UCenter对应的应用,来确保应用和UCenter通信成功从而完成整合。
-
应用主URL改为
应用域名/index.php/uc
- index.php若已配置隐藏,则可不用写
- uc 为笔者在 4.2 -> 5. 处配置的路由信息,可替换为自己的配置
-
应用接口文件名称 由
uc.php
改为uc
五、整合完成
返回应用列表,发现通信成功,至此,UCenter 与 ThinkPHP5.1整合完成
六、后记
本文仅描述了UCenter与ThinkPHP5.1的整合过程,最终实现了通信成功。其中,笔者创建的uc模块仅为应用与UCenter通信使用。若读者要参照UCenter开发手册,对UCenter进行开发,则需要新建模块、控制器,使其继承 thinkphp根目录/extend/Controller/UcController.php
进行开发。
如果本文对您有用或有意见建议,欢迎点赞、留言~