去评论
dz插件网

在 X5 中做一个 Discuz! 登录

迪巴拉
2025/05/01 07:44:02
大哥,你标题啥意思!?没看懂啊!!

是不是很多人看到这个标题没明白啥意思?哈哈,我们都知道 QQ 登录、微信登录是吧,那如何做一个 Discuz! 登录呢?

这回听明白没?没错,就是这个 Discuz! 登录到另一个 Discuz! 的意思,听着有点神奇吧!?


要说这个,我们要首先说下 X5 的一大特性 RESTful 接口。这是 X5 基于 oAuth2 标准设计的开放性接口。是的,开放性,意思是你可以自己随意开发自己的 API 接口,而且无需写代码,只需写一个 XML。关于如何开发 API 在这文章里我就不多说了,只给个链接,自己读去哈“Discuz RESTful API: Discuz RESTful API 开发手册”

在做今天我要做的事情之前,我们先准备2个X5,先分别看下2个 X5 的后台

站点 A 有 3 个用户


站点 B 只有一个 admin 用户

我们拿站点 A 作为用户中心,站点 B 用户直接登录站点 A 的用户。

之前的文章“在 X5 下开发一个第三方登录”我们提到了如何开发一个第三方登录,这次我们加强下写法,直接调用 RESTful 接口实现登录

我们先打开站点 A 的 RESTful 后台,上传 discuz_restful_official_trial.xml 文件,然后添加一个应用


然后我们就可以开始写代码了,在站点 B 把前文的插件复制过来,打开 account.class.php,把 RESTful 基础类准备好



还记得前文中 login($referer = '', $op = 0) 方法的这个简易登录框吗?我们继续用,不改它



我们直接修改下的身份校验部分



这里,我们先调用 /token 接口获取了 token,然后调用 /member/login 接口进行登录。登录成功后我们通过 $ret['data']['user'] 获取身份。
作为范例,我们就不进行复杂的加密过程了,把登录的身份信息传递给 callback 地址。

在 getLoginUser() 方法中我们把传递过来的数据入库,沿用前文范例的逻辑就可以



我们测试下流程:


登录的时候点这个登录入口


弹出那个简易的登录框,我们输入站点 A 的第三个用户


成功,站点 B 自动注册了这个用户并登录成功,我们去后台看一下


2个人了,完成!

这就是最简单的 Discuz! 登录范例,喜欢不!