整了论坛跟主站集成,需要实现用户的统一管理,注册,登录等要在主站进行,下面是一些记录的流水账。
Discuz的版本是3.2
Discuz 设置cookies域名共享
在dz要设置 cookie的域为 .xx.com
配置文件的位置 config/config_global
主站点写入cookie的时候也要 指定domain .xx.com
Discuz 用户密码存储逻辑
dz用户表 dz_uc_members
存了密码和salt,它是UCenter中的用户数据表,登录时候根据这个对比 主要是负责登陆
用户主表 pre_common_member
也存了密码,加密规则 md5(password)
(这个密码没啥用) 这表主要是负责记录用户在论坛里的发帖,积分,等行为的记录
UCenter的密码加密规则 源码文件 uc_client/model/user.php
md5(md5($password).$user['salt'])
伪代码 md5(md5(password)+salt)
登录和注册逻辑的说明文章
- http://bbs.zb7.com/thread-545049-1-1.html
- https://www.liudon.org/737.html
- 表结构的文档 http://doc.ipple.net/discuz/#common
登录注册等功能的集成
A站是主网站 www.xxx.com ,B站是dz bbs.xxx.com
主要是登录和注册逻辑,退出逻辑跟登录有类似地方,用户密码更新逻辑跟注册有类似地方。
第一种思路
模拟登录,共享cookies,数据库插入用户
登录逻辑:不管用户当前浏览器在A站还是B站, 点击登陆之后都会跳转到A站的登录页面,这个时候浏览器在A站的登录页面
提交登录表单,A站的服务端首先检查用户是否合法,如果合法的话,A站的server会模拟发送一个登录请求(httpclient)到B站服务端(这里我们是买了个插件,提供的这个端口,质量也挺。。dz单点登录插件),在B端登录之后,把获取到的cookie
写入 .xxx.com
这个domain,之后才会发送响应给浏览器,接着就是302跳转到B站的页面上,此时会显示已经登录。
注册逻辑: 可以直接操作数据库,要折腾源码,要插入的表不少。用户在主站注册之后,直接把信息写入到dz论坛的数据库中。
下面是注册时要插入用户信息的表,前缀可能不同哈
pre_common_member
pre_common_member_count
pre_common_member_field_forum
pre_common_member_field_home
pre_common_member_profile
pre_common_member_status
pre_ucenter_members
pre_ucenter_memberfields
第二种思路 用UCenter
其事UCenter已经提供了注册,登录,退出等的api
,这里有一个java版本的文章 java整合dz同步注册登录等,比较重要一点就是dz用户自动激活,这个需要修改dz的源码 整合 ucenter 注册自动激活。
利用js和ucenter的接口
共同合作完成dz登录的模拟。
第三种思路 SSO
正常的sso,要修改源码,要求更高了,用户写入,登录逻辑都要相应的修改。
禁用注册 登录 修改密码
==怎样禁用dz的注册,让注册地址跳转到主站的注册页面?==
这篇文章��️讲解: http://www.aichengxu.com/view/2549321
也可以用 openresty rewrite 重定向注册url
⚠️:修改源码要先备份
==怎么阻止dz的登录,引导用户去主站登录?==
登录有页面登录也有ajax登录,所以直接修改登录部分的模版
笔者找到的登录入口
1. 右上角登录按钮
2. 发帖子的时候登录按钮
3. 登录某些需要权限的url,会在页面显示登录框
这几种情况都会引用同一个模版,模版所在的文件夹 data/template/ ,找找login关键字的文件类似member_login
⚠️:修改源码要先备份
==怎么禁用dz修改密码的功能?==
看到很多人抱怨啊,怎么不提供一个api呢,还是该源码把,直接把这个页面改掉算了。
代码位置 template/default/home/spacecp_profile.htm
有个案例:http://www.discuz.net/thread-2075444-1-1.html
只是修改了模版,http接口其实还是存在的。
⚠️:修改源码要先备份
其它问题
除去标题tiitle中的 Powered by Discuz!
字样
每次在搜索引擎搜索自己的论坛的时候,标题上总是有 Powered by Discuz! 这几个词,不太美观,怎么去掉他们呢?
编辑 template/default/common/header_common.htm
这个文件,找到html的title的部分,删除掉就行了。 如果使用的不是默认主题
, 请到对应主题下寻找这个 header_common 的模版。