下面看到一站長(zhǎng)分享的關(guān)于dz注冊(cè)與登錄的一個(gè)流程了,包括了用戶中心的同步配置,代碼如下希望對(duì)各位同學(xué)會(huì)有所幫助.
注冊(cè)流程
第一步:/source/class/class_member.php: on_register注冊(cè)入口,602 左右:
- if(!$activation) {//不為空,說明用戶已經(jīng)注冊(cè)過
- //將用戶注冊(cè)到用戶中心,調(diào)用第二步uc_user_register方法
- $uid = uc_user_register(addslashes($username), $password, $email, $questionid, $answer, $_G['clientip']);
第二步:/uc_client/client.php:uc_user_register 調(diào)用將用戶注冊(cè)到用戶中心的方法,調(diào)用第三步的onregister方法.
第三步:/uc_client/control/user.php: onregister 將用戶注冊(cè)到用中心,調(diào)用第四步add_user方法
第四步:/uc_client/model/user.php:add_user 將用戶注冊(cè)到ucenter返回用戶id
第五步:/source/class/class_member.php,685行 左右,會(huì)把用戶信息寫到common_member表,注冊(cè)結(jié)束.
- C::t(‘common_member’)->insert($uid, $username, $password, $email, $_G['clientip'], $groupinfo['groupid'], $init_arr);
登陸流程
第一步:/source/class/class_member.php:on_login 登陸入口,87行左右,調(diào)用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行左右 調(diào)用 logincheck,如下:
- if(!($_G['member_loginperm'] = logincheck($_GET['username']))) {
- showmessage(‘login_strike’);
- } //開源軟件:Vevb.com
第三步:/source/function/function_member.php: userlogin 用戶登陸查詢相關(guān)表,第29行-40行左右會(huì)用調(diào)用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 根據(jù)條件判斷登陸,114-120 判斷查詢條件查詢出ucenter用戶信息
/uc_client/model/user.php 包含有g(shù)et_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 行左右會(huì)根據(jù)條件$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:以上所有方法都會(huì)先執(zhí)行,/source/class/discuz/discuz_application.php: _init_user,所以如果要自己寫checklogin 可以考慮從_init_user 方法入手,如果與自己的平臺(tái)做bbs的打通.
注冊(cè)可以考慮在第4步做操作,調(diào)用自己平臺(tái)的注冊(cè)接口,注冊(cè)用戶,并將用戶id返回,寫入到ucenter.
/uc_client/model/user.php:add_user 方法內(nèi),登陸打通可以考慮在 第三步調(diào)用uc_user_login 方法前.
1.調(diào)用自己平臺(tái)接口查詢用戶相關(guān)信息
2.查詢ucenter中用戶是否存在
3.如果不存在insert一條數(shù)據(jù)
4.common_member可以寫也可以不寫,如此時(shí)不寫 $result['status']==-1 會(huì)在class_member 95-106 行左右寫入
如果在自己平臺(tái)處于登陸狀態(tài),在bbs也為登陸狀態(tài),則可以考慮從_init_user 方法入手,做登錄判斷.
無法同步登陸需要注意檢查的地方:
1.ucenter中應(yīng)用的配置信息是否完全正確,并與目標(biāo)站后臺(tái)的ucenter接口配置信息一致.
2.如果遇到通信成功,但是一邊能登陸一邊無法同步登陸的情況,請(qǐng)首先檢查 uc_client/data/cache/apps.php中的站點(diǎn)信息是否完全.
3.請(qǐng)注意編碼以及程序的BOM頭導(dǎo)致返回信息亂碼的情況.
新聞熱點(diǎn)
疑難解答
圖片精選