discuz注册和登陆流程的(用户中心同步)

注册流程
第一步:
/source/class/class_member.php: on_register注册入口
L602 左右
if(!$activation) {//不为空,说明用户已经注册过
//将用户注册到用户中心,调用第二步uc_user_register方法
$uid = uc_user_register(addslashes($username), $password, $email, $questionid, $answer, $_G['clientip']);

第二步:
/uc_client/client.php: uc_user_register 调用将用户注册到用户中心的方法,调用第三步的onregister方法
第三步:
/uc_client/control/user.php: onregister 将用户注册到用中心,调用第四步add_user方法
第四步:
/uc_client/model/user.php:add_user 将用户注册到ucenter返回用户id
第五步:
/source/class/class_member.php:
L685行 左右,会把用户信息写到common_member表。注册结束
C::t(‘common_member’)->insert($uid, $username, $password, $email, $_G['clientip'], $groupinfo['groupid'], $init_arr);

登陆流程
第一步:
/source/class/class_member.php: on_login  登陆入口
87行左右,调用userlogin方法如下:
$result = userlogin($_GET['username'], $_GET['password'], $_GET['questionid'], $_GET['answer'], $this->setting['autoidselect'] ? ‘auto’ : $_GET['loginfield'], $_G['clientip']);
第二步:
/source/function/function_member.php: logincheck
72行左右 调用 logincheck,如下:
if(!($_G['member_loginperm'] = logincheck($_GET['username']))) {
showmessage(‘login_strike’);
}
第三步:
/source/function/function_member.php: userlogin  用户登陆查询相关表
第29行-40行左右会用调用uc_user_login方法
if($isuid == 3) {
if(!strcmp(dintval($username), $username) && getglobal(‘setting/uidlogin’)) {
$return['ucresult'] = uc_user_login($username, $password, 1, 1, $questionid, $answer, $ip);// uc_client/client.php
} elseif(isemail($username)) {
$return['ucresult'] = uc_user_login($username, $password, 2, 1, $questionid, $answer, $ip);// uc_client/client.php
}
if($return['ucresult'][0] <= 0 && $return['ucresult'][0] != -3) {
$return['ucresult'] = uc_user_login(addslashes($username), $password, 0, 1, $questionid, $answer, $ip);
}
} else {
$return['ucresult'] = uc_user_login(addslashes($username), $password, $isuid, 1, $questionid, $answer, $ip);

}

 

/uc_client/client.php: 包含uc_开头的全部方法,例uc_user_login
/uc_client/control/user.php: onlogin 根据条件判断登陆,114-120 判断查询条件查询出ucenter用户信息
/uc_client/model/user.php 包含有get_user_by_uid,get_user_by_username 等方法 第50行左右查询common_member表,如下:
$member = getuserbyuid($return['ucresult']['uid'], 1);

回到/source/class/class_member.php文件on_login方法

第95-106 行左右会根据条件$result['status']==-1 ,写common_member表,并查询出写入信息
C::t(‘common_member’)->insert($uid, $result['ucresult']['username'], md5(random(10)), $result['ucresult']['email'], $_G['clientip'], $groupid, $init_arr);
$result['member'] = getuserbyuid($uid);

————————————————————————————-
ps:以上所有方法都会先执行
/source/class/discuz/discuz_application.php: _init_user
所以如果要自己写checklogin 可以考虑从_init_user 方法入手

如果与自己的平台做bbs的打通。
注册可以考虑在第4步做操作,调用自己平台的注册接口。注册用户,并将用户id返回。写入到ucenter
/uc_client/model/user.php:add_user 方法内

登陆打通可以考虑在 第三步调用 uc_user_login 方法前,
1.调用自己平台接口查询用户相关信息
2.查询ucenter中用户是否存在
3.如果不存在insert一条数据
4.common_member可以写也可以不写 ,如此时不写 $result['status']==-1 会在class_member 95-106 行左右写入
如果在自己平台处于登陆状态,在bbs也为登陆状态,则可以考虑从_init_user 方法入手。做登录判断

无法同步登陆需要注意检查的地方:

1.ucenter中应用的配置信息是否完全正确,并与目标站后台的ucenter接口配置信息一致。

2.如果遇到通信成功,但是一边能登陆一边无法同步登陆的情况,请首先检查 uc_client/data/cache/apps.php中的站点信息是否完全。

3.请注意编码以及程序的BOM头导致返回信息乱码的情况。

时间: 2024-08-02 00:50:48

discuz注册和登陆流程的(用户中心同步)的相关文章

asp.net用户中心,单位和用户数据同步思路

问题描述 目前有3个系统,1个是用户中心,只用来存储用户信息,2个子系统,1:子系统的用户信息都从用户中心的接口来获取,但是数据量有点大.2:数据中心不能操作子系统的数据库,所以不能做成实时的增删改接口.3:子系统获取用户中心的数据时,希望只获取用户中心有修改过的数据.希望各种能提供一些好的建议和思路. 解决方案 解决方案二:关于数据同步,那就是ETL的解决方案了.1.SSIS2.SQLserver的数据同步3.kettle数据工具太多了.关键是需要根据你们的数据库类型和业务的分配.解决方案三:

OpenCenter —— PHP 通用用户中心框架

OpenCenter是一款基于ThinkPHP的用户中心产品.其介于框架和应用之间,提供通用的用户中心和后台模块给开发者用来实现自己的业务系统.基于Apache2.0的开源协议,对商业友好,永久开源免费.使用OC您将获得: 1.通过简单配置即可实现用户中心,无需开发即可使用.用户中心包含了注册.登陆.第三方登陆.个人主页等功能. 注册支持用户名.邮箱.手机号方式: 注册步骤可以配置,可以设置是否需要上传头像等步骤: 独有的用户角色机制,可以轻松实现不同身份不同权限的用户注册: 个人主页展示,可以

用户中心系统设计

背景 一般来说大型互联网公司会把授权和用户信息的逻辑放到一个应用中,而这个应用我们统一称为用户中心. 用户中心不关心具体的业务逻辑,只处理用户信息相关的管理及授权登录.当第三方应用需要登录的时候,会把用户的登录请求转发到用户中心处理,处理完毕后,返回给第三方应用,第三方应用根据对应的凭证登录到系统内部. 主要功能如下 用户登录与注册 基本信息查询与修改 从功能来看,整个用户中心还是很简单单,不过其中的逻辑还挺复杂的,比如注册功能,就要分为手机注册与邮箱注册,手机要发送手机验证码,邮箱需要发送验证

用户体验衡量:Google应用的用户中心的指标体系

文章描述:Google应用的这套用户中心的指标体系通过提供一个可广泛适应性的维度框架,以及具体指标的创造流程,给我们量化用户体验提供了非常好的参考. 非常感谢@liuyaping在阿里做的关于用户中心的衡量指标的分享和交流,很受启发.Google应用的这套用户中心的指标体系通过提供一个可广泛适应性的维度框架,以及具体指标的创造流程,给我们量化用户体验提供了非常好的参考. 下面是根据Google的<Measuring the User Experience on a Large Scale: Us

请教关注企业公众号以后自动登录网站用户中心问题

问题描述 请教关注企业公众号以后自动登录网站用户中心问题 1,现在用户只要关注企业公众号以后,自动生成随机用户名密码.并且可以通过底部菜单链接进入用户中心. 2,现在的问题是,过了几个小时以后,再从微信公众平台底部菜单点击用户中心,这个时候提示需要登录,页面自动跳转到登录界面(原则上还是自动登录才对) 3,当我关闭网页,到微信公众平台再次点击用户中心,又可以自动登录了 4,排查,第一次点击用户中心,发现可以获取code. 但是获取不到openid.返回错误提示errcode=>40029:err

mysql-关于2个表的用户数据同步问题

问题描述 关于2个表的用户数据同步问题 我有2个数据库(A,B),A,B分别在不同的服务器上,A表代表的是商城数据库,B表代表的是另外一个商城的数据库,A,B分别有一个用户表.2个表的字段是不一致的, 现在业务上需要的是,同一个用户名可以登陆2个商城,请教下,应该怎么做 解决方案 想来遇到这种困难的话,程序一定不是你写的,源码也不在手中了,想正常修改程序也自然是不可能了 而两台数据库之间互通,比如通过VPN连接的话,自然也是困难重重的 这种情况我曾经遇到过类似的 我当时的解决方法是修改两个数据库

微信公众号用户OpenID同步导出系统

一.简介 同步公众账号用户信息,包括OpenID.昵称.头像.地区等.   二.主要功能 同步公众账号用户 OpenID,以及昵称.头像.性别.地区.关注时间等,支持认证订阅号.认证服务号. 支持超过1万用户列表同步 支持普通同步(理论值每秒一个用户资料),极速同步(理论值每秒100个用户资料),实际使用时受微信服务器响应速度影响. 支持标签同步 支持导出成微信商户平台红包用户格式文件.   三.演示地址 网址:http://2.nine.applinzi.com/ 账号密码: 扫描关注下方二维

mvc4-如何用MVC4建立一个工程。功能是:实现用户登录、注册,并将用户密码存储到本机SQL2008数据库。

问题描述 如何用MVC4建立一个工程.功能是:实现用户登录.注册,并将用户密码存储到本机SQL2008数据库. 如何用MVC4建立一个工程.功能是:实现用户登录.注册,并将用户密码存储到本机SQL2008数据库. 解决方案 创建一个默认的完整的mvc4应用,就是自带这些功能的. 解决方案二: 第4章 实现用户登录和注册功能

乐视网开通了全新用户中心,并推出“看视频、获大奖”等活动

在今年10月9日举办第三届乐视影视盛典上,乐视网将全面推出"乐迷"公决,乐迷将全面参与年度最受欢迎的电影.电视剧.明星评选.近日,乐视网将在北京.上海.广州举办三场线下评审会,除邀请明星.专业评委外,乐视网还将邀请多名大众评审参与:此外,乐视网还将在上海校园举行多场拉票活动,真正体现 "乐迷"http://www.aliyun.com/zixun/aggregation/4880.html" style="line-height: 1.6;&qu