安裝UCenter第三步,測試同步登陸和同步退出" />

花魁直播高品质美女在线视频互动社区 - 花魁直播官方版

 歡迎來到素材無憂網(wǎng),按 + 收藏我們
登錄 注冊 退出 找回密碼

ecshop會員整合ecshop與discuz論壇整合教程

時間: 2024-02-25 10:43 閱讀: 作者:素材無憂網(wǎng)

我們要實現(xiàn)的效果是
1、ec login dx login ec logout dx logout -> ecshop登陸 discuz登陸,ecshop退出 discuz退出
2、ec login dx login dx logout ec logout -> ecshop登陸 discuz登陸,discuz退出 ecshop退出
3、dx login ec login dx logout ec logout -> discuz登陸 ecshop登陸,discuz退出 ecshop退出
4、dx login ec login ec logout dx logout -> discuz登陸 ecshop登陸,ecshop退出 discuz退出
步驟一,安裝ecshop和discuz
安裝包的文件編碼統(tǒng)一和安裝過程這里略過了
第二步,ecshop會員整合->安裝UCenter
把discuz安裝包里面的 uc_client 文件夾 一份到 ecshop 網(wǎng)站目錄下。
ecshop后臺->會員管理->會員整合
最后登陸uc_server看"應用管理"是否通信成功
第三步,測試同步登陸和同步退出
通信成功后,我們在ecshop網(wǎng)站上注冊一個新用戶,注冊成功后,并自動登陸,再打開discuz網(wǎng)站,發(fā)現(xiàn)沒有同步登陸。
查看uc_server->用戶管理 里面有剛剛ecshop注冊的那個新用戶了,再看discuz后臺管理 -> 用戶 -> 用戶管理 里面沒有這個新用戶。
回到ecshop注冊頁面的php處理,user.php,大概在272行,
$ucdata = empty($user->ucdata)? "" : $user->ucdata;
改成
$user->login($username,$password);$ucdata = isset($user->ucdata) ? $user->ucdata : '';
$user->login的相關詳細介紹可以參考ecshop中$user對象
再來重新注冊一個新ecshop用戶,跟蹤同步登陸代碼,發(fā)現(xiàn)ecshop新注冊的用戶還是只存放到Ucenter中,需要激活之后才會寫入到pre_common_member中,同時dsetcookie()。
這個問題的解決方法增加對pre_common_member及pre_common_member_count的寫入(該文件為discuz下的api目錄中的uc.php)
大概191行:
if(($member = getuserbyuid($uid, 1))) {
dsetcookie('auth', authcode("$member[password]t$member[uid]", 'ENCODE'), $cookietime);}
修改成
if(($member = getuserbyuid($uid, 1))) {
dsetcookie('auth', authcode("$member[password]t$member[uid]", 'ENCODE'), $cookietime);}else{
//下面為增加部分
$username = $get['username'];
$password = md5(time().rand(100000, 999999));
$email = $get['email'];
$ip = $_SERVER['REMOTE_ADDR'];
$time = time();
$userdata = array(
'uid' => $uid,
'username' => $username,
'password' => $password,
'email' => $email,
'adminid' => 0,
'groupid' => 10,
'regdate' => $time,
'credits' => 0,
'timeoffset' => 9999
);
DB::insert('common_member', $userdata);
$status_data = array(
'uid' => $uid,
'regip' => $ip,
'lastip' => $ip,
'lastvisit' => $time,
'lastactivity' => $time,
'lastpost' => 0,
'lastsendmail' => 0,
);
DB::insert('common_member_status', $status_data);
DB::insert('common_member_profile', array('uid' => $uid));
DB::insert('common_member_field_forum', array('uid' => $uid));
DB::insert('common_member_field_home', array('uid' => $uid));
DB::insert('common_member_count', array('uid' => $uid));
$query = DB::query("SELECT uid, username, password FROM ".DB::table('common_member')." WHERE uid='$uid'");
if($member = DB::fetch($query)) {
dsetcookie('auth', authcode("$member[password]t$member[uid]", 'ENCODE'), $cookietime);
}}
最后,更新3個后臺的緩存,ecshop后臺,discuz后臺,Ucenter后臺。再來注冊或者登陸,可以同步登陸了。
通信成功,不能同步登陸 和 新用戶需要激活問題,解決!
還記得最前面我們要的效果嗎?
1、ec login dx login ec logout dx logout -> ecshop登陸 discuz登陸,ecshop退出 discuz退出
在ecshop中退出,發(fā)現(xiàn)discuz沒有退出,繼續(xù)找問題。
在ecshop程序的 includesmodulesintegratesucenter.php 文件logout()方法中,第205行
$this->ucdata = uc_call("uc_user_synlogout"); ? //同步退出
發(fā)現(xiàn)調用call_user_func_array 時必須要二個參數(shù)都要有,否則無法調用
所以上面的代碼應該修改成:
$this->ucdata = uc_call("uc_user_synlogout",array("0")); //同步退出
或者修改 ecshop程序的 includeslib_common.php 大概2152行中
function uc_call($func, $params=null)
修改成
function uc_call($func, $params=array())
這樣,我們的個效果就完成了。
2、ec login dx login dx logout ec logout ->ecshop登陸discuz登陸,discuz退出ecshop退出
個效果做好后,發(fā)現(xiàn)第二個效果有問題,discuz退出,ecshop沒有退出。
繼續(xù)找原因,在ecshop登陸后,discuz 點退出,
會發(fā)送一個javascript申請到/api/uc.php的 logout請求( 如果setcookie 只是在/bbs/下設置cookie 為空,那么就清空不了cookie )
所以ecshop程序 api/uc.php 里面是function set_cookie( 方法應該是這樣
function set_cookie($user_id='', $user_name = '', $email = ''){
if (empty($user_id))
{
/* 摧毀cookie */
$time = time() - 3600;
//setcookie('ECS[user_id]', ?'', $time);
//setcookie('ECS[username]', '', $time);
//setcookie('ECS[email]', ? ?'', $time);
setcookie('ECS[user_id]', '', $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
setcookie('ECS[username]', '', $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
setcookie('ECS[email]', '', $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
}
else
{
/* 設置cookie */
$time = time() + 3600 * 24 * 30;
setcookie("ECS[user_id]", ?$user_id, ? $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
setcookie("ECS[username]", $user_name, $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
setcookie("ECS[email]", ? ?$email, ? ? $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
}}
還有要修改ecshop的 ucenter插件,includes/modules/integrates/ucenter.php
function ucenter($cfg)
{
parent::integrate(array());
$this->user_table = 'users';
$this->field_id = 'user_id';
$this->field_name = 'user_name';
$this->field_pass = 'password';
$this->field_email = 'email';
$this->field_gender = 'sex';
$this->field_bday = 'birthday';
$this->field_reg_date = 'reg_time';
$this->need_sync = false;
$this->is_ecshop = 1;
$this->cookie_path = $GLOBALS['cookie_path'];//wuruhua
$this->cookie_domain = $GLOBALS['cookie_domain'];//wuruhua
function set_cookie($username='')
{
if (empty($username))
{
/* 摧毀cookie */
$time = time() - 3600;
//setcookie("ECS[user_id]", ?'', $time, $this->cookie_path);
//setcookie("ECS[password]", '', $time, $this->cookie_path);
setcookie("ECS[user_id]", ?'', $time, $this->cookie_path, $this->cookie_domain); ?//wuruhua
setcookie("ECS[password]", '', $time, $this->cookie_path, $this->cookie_domain);//wuruhua
}
最后,如果你發(fā)現(xiàn)2個程序的uc_client配置文件不一致的話,還要把ecshop程序下的 uc_clientdatacacheapps.php->覆蓋到discuz程序下的uc_clientdatacacheapps.php
這樣,我們的第2個效果也完成了。然后你會發(fā)現(xiàn),當你把和第二個效果完成了,第三和第四也是OK的了。
過程中修改的文件有:
discuz程序:
apiuc.php
uc_clientdatacacheapps.php
ecshop程序:
user.php
apiuc.php
includeslib_common.php
includesmodulesintegratesucenter.php
ecshop ucenter卸載
登錄ecshop后臺,"SQL查詢"提交以下語句,清除緩存!
update ecs_shop_config set value='ecshop' where code='integrate_code';update ecs_shop_config set value='' where code='integrate_config';
這里的SQL將整合信息還原成默認的ecshop方式,然后清空整合數(shù)據(jù)。
注意:如果你的數(shù)據(jù)表前綴不是ecs_ 請自行修改

版權聲明: 本站資源均來自互聯(lián)網(wǎng)或會員發(fā)布,如果侵犯了您的權益請與我們聯(lián)系,我們將在24小時內刪除!謝謝!

轉載請注明: ecshop會員整合ecshop與discuz論壇整合教程

標簽: ecshop會員  
相關文章
推薦文章
模板推薦