云服务器促销,免费安装宝塔面板!
开启左侧

[DZ教程] Discuz 注册和登录调用文件说明,可集成整合第三方网站

[复制链接]
风雨兼程 发表于 2017-10-23 22:21:51 | 显示全部楼层 |阅读模式

本站会员必须 邮箱验证成功后 才能发帖。马上注册查阅更多教程,下载海量资源,让你轻松玩做站

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
! D4 W( Z; |  T- T5 X. h
1 C+ z& N8 V6 Y- [/ j# y. k
9 Q& {# j- e) }  n2 V6 r& Q# d
2 t- b0 X. `+ z; {* A
bbs 用户注册流程  l9 A3 s6 L# n  f
第一步:
# e/ l, e2 U5 k1 m1 L; ~9 r/source/class/class_member.php: on_register注册入口9 k: ?) c6 G# W* W8 D2 [! ^
L602 左右
# I  d# A- _2 N" k$ i5 t1 Z0 e8 E$ B
  1. if(!$activation) {//不为空,说明用户已经注册过//将用户注册到用户中心,调用第二步uc_user_register方法$uid = uc_user_register(addslashes($username), $password, $email, $questionid, $answer, $_G['clientip']);
复制代码

6 F" _. V$ c( e& x7 `% G* x* W2 Y  [9 E- m5 h/ y
第二步:6 F9 l; A  T  k5 L; d  ?" t4 N
/uc_client/client.php: uc_user_register 调用将用户注册到用户中心的方法,调用第三步的onregister方法
& [% q9 E$ N; w第三步:; C& p/ n+ t* ]! w$ Q. e
/uc_client/control/user.php: onregister 将用户注册到用中心,调用第四步add_user方法
$ K9 c  |5 `- @: O8 i第四步:& |( b; c: m# t4 I% Q  L- y5 H# a
/uc_client/model/user.php:add_user 将用户注册到ucenter返回用户id* z2 D" d$ d5 d) D) Q
第五步:. _2 U$ u9 p; m/ g% F5 U8 H
/source/class/class_member.php:
% K' F) K5 ^2 zL685行 左右,会把用户信息写到common_member表。注册结束
. n& N1 ~$ e8 e, M
' g0 I& I! J" t
  1. C::t('common_member')->insert($uid, $username, $password, $email, $_G['clientip'], $groupinfo['groupid'], $init_arr);
复制代码

! s3 G1 y' v3 `  C% v
1 q, E1 o# j  ]1 u2 r8 Y! i- d2 A2 P8 z& q
bbs 登陆流程
" h  }% w& O* m) f第一步:
0 p9 n' b. v- m/source/class/class_member.php: on_login 登陆入口/ j& w- a& z4 ^7 X6 I1 Z) s9 c
87行左右,调用userlogin方法如下:
* j9 ?9 P, o& [  Z! W# ~1 D! Z4 {* l4 A) s* T' u0 {" D: r
  1. $result = userlogin($_GET['username'], $_GET['password'], $_GET['questionid'], $_GET['answer'], $this->setting['autoidselect'] ? 'auto' : $_GET['loginfield'], $_G['clientip']);
复制代码
3 U# I# a9 H$ c8 ^  T
+ b; V  D1 i$ k. T* j
第二步:
$ e1 k' R0 F3 q9 }$ _1 J/source/function/function_member.php: logincheck 9 e  ^0 ]+ b: u8 v% c
72行左右 调用 logincheck,如下:
5 j6 r' Y/ ?2 f! t
# t( m" [% K6 w
  1. if(!($_G['member_loginperm'] = logincheck($_GET['username']))) {showmessage('login_strike');}
复制代码
; L/ F3 F0 Y. H- B
; ]; O6 h/ N& K' }& w  t; f$ U& c
第三步:% J% y  W8 U8 ^0 S
/source/function/function_member.php: userlogin 用户登陆查询相关表
& ~9 d+ r! \' w8 ]: |# g0 \3 d8 V: }第29行-40行左右会用调用uc_user_login方法+ q4 U) p* J" O- I+ o; g( d. _
9 g2 C: Y/ E) M& ]. J2 [
  1. 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);}% H9 I$ l6 A; x5 d! P' N" t! [
复制代码
4 d+ `( S  ]& `: }

$ K1 ?# ^5 c, d5 V8 G( M/uc_client/client.php: 包含uc_开头的全部方法,例uc_user_login
: L6 Q6 S6 t0 l% K/uc_client/control/user.php: onlogin 根据条件判断登陆,114-120 判断查询条件查询出ucenter用户信息
: K1 B! t8 B7 q' Z7 i8 \4 w4 b/uc_client/model/user.php 包含有get_user_by_uid,get_user_by_username 等方法 第50行左右查询common_member表,如下:( T- D$ s- l  i/ f9 B& ~, x, Z
  I$ k% {5 T% ?- R9 M& D
$member = getuserbyuid($return['ucresult']['uid'], 1);; S2 _, T0 a0 u5 ^' _% J

5 f- i" O/ X0 P) [  g& i6 T) V) P
回到/source/class/class_member.php文件on_login方法; K% T! j' x! R2 |

2 k/ ~1 k5 z& u( O2 Y* `2 y* M6 w$ X+ b' W8 c9 W% I
第95-106 行左右会根据条件$result['status']==-1 ,写common_member表,并查询出写入信息3 V) p, I, ?! I( o% E; i

5 ~& b1 Y0 r5 G: U
  1. C::t('common_member')->insert($uid, $result['ucresult']['username'], md5(random(10)), $result['ucresult']['email'], $_G['clientip'], $groupid, $init_arr);$result['member'] = getuserbyuid($uid);
    * H7 N" I# r( W; S* W( A0 E. F1 H
复制代码
1 v8 z+ a" G9 f& Y+ _; Q2 x

/ c. }; H" G4 b" }  s4 k-------------------------------------------------------------------------------------
/ S  W! A) F' o7 L) }: f9 Aps:以上所有方法都会先执行 0 {" G. t& Y" y' M; a. |
/source/class/discuz/discuz_application.php: _init_user 8 E7 `7 F# M# A: W: v( h
所以如果要自己写checklogin 可以考虑从_init_user 方法入手4 X# O  A2 ~$ D7 y
5 W% }- D; T/ F

6 W, a9 R. f, O1 ^% X5 R如果与自己的平台做bbs的打通。. y0 i, u; B0 p' \; S
注册可以考虑在第4步做操作,调用自己平台的注册接口。注册用户,并将用户id返回。写入到ucenter9 {  E+ O; ^: [3 G" D+ J% [
/uc_client/model/user.php:add_user 方法内) x; B- n& I& a$ l7 ~$ a

6 R0 R6 @* W7 `( q2 B' Y1 E
, Y5 w: C+ ]( m7 Q0 a8 t" L# m0 v登陆打通可以考虑在 第三步调用 uc_user_login 方法前,# [. |9 w# P+ ?8 {
1.调用自己平台接口查询用户相关信息
+ b! Q) S0 N: @% a2.查询ucenter中用户是否存在+ T5 y3 z* v1 H
3.如果不存在insert一条数据
! E2 V- X: P4 w2 {4 p4.common_member可以写也可以不写 ,如此时不写 $result['status']==-1 会在class_member 95-106 行左右写入
- c' W7 }  Y. q" e, J* Q7 p* x" B. J' v, |  _# k

/ |" \- R, U" I. d5 m" k7 E8 t$ \/ K如果在自己平台处于登陆状态,在bbs也为登陆状态,则可以考虑从_init_user 方法入手。做登录判断 ' `" U  d" f0 h. t0 V- ]1 g4 C
当流科技-专业Discuz建站、仿站业务,专注处理discuz!论坛挂马,专注提供论坛托管维护服务! 提供Discuz论坛空间、VPS、云服务器!咨询QQ 569160956 778521512
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

精彩课程推荐

抱歉,当前存在网络问题或服务器繁忙,详细错

主讲:我心枫叶 Discuz!教程

Discuz!论坛网盘附件免跳转下载(手机版网

主讲:当流科技 Discuz插件

宝塔面板绑定域名无法访问后台怎么解决?

主讲:风雨兼程 服务器学院

discuz论坛搬家教程,如何搬迁到新服务器?

主讲:风雨兼程 Discuz!教程

Discuz!X3.3全新安装和升级后快速回复框丢

主讲:风雨兼程 Discuz!教程

宝塔面板phpmyadmin 数据库502 Bad Gateway

主讲:当流科技 服务器学院

宝塔面板mysql怎么用navicat 连接数据库呢

主讲:当流科技 服务器学院

Discuz! X3.4虚拟人气虚拟用户在线插件 完

主讲:执手天涯 Discuz插件

商务合作

0551-66191059
service#dangliu.net
点击这里给我发消息
dz论坛/Discuz!论坛新手

关注微信公众号

QQ扫码 加 DZ技术群