PHPCMS整合UCENTER後登錄問題

PHPCMS整合UCENTER後咱們會常常有修改用戶密碼問題,你會發現若是在Ucenter中直接修改密碼後,PHPCMS用新密碼沒法登錄了。其實這是由於密碼沒同步的緣由,下面講解下登錄流程:php

登錄會調用module/member/index.php的login方法api

若是開啓了PHPSSO,則會調用$status = $this->client->ps_member_login($username, $password);dom

ps_member_login這個方法在  module/member/class/client.class.php中 post

這個方法會調用$this->_ps_send('login', array('username'=>$username, 'password'=>$password));ui

private function _ps_send($action, $data = null) {this

    return $this->_ps_post($this->ps_api_url."/index.php?m=phpsso&c=index&a=".$action, 500000, $this->auth_data($data));url

}spa

經過這個方法能夠看出這個方法會經過phpsso_server/index.php/phpsso/index.php文件LOGIN方法來判斷登錄狀況。如今就有幾種狀況,server

首先這個方法會經過list($uid, $uc['username'], $uc['password'], $uc['email']) = uc_user_login($this->username, $this->password, 0);獲取$uid,於此同時會查詢pre_phpsso_member表中的userinfo記錄。ip

一、若是userinfo有記錄而且開啓了uc於此同時uid沒有則表明,ucenter中沒有數據,則用用戶密碼密碼註冊一遍。於此同時將ucuerid更新到  pre_phpsso_member表中

二、若是userinfo沒記錄而且開啓了uc於此同時uid有記錄,則表示在ucenter註冊了,但在phpsso沒註冊,則往  pre_phpsso_member中插入數據。

三、若是  userinfo沒記錄而且開啓了uc於此同時uid沒記錄,則直接exit(-1),用戶不存在了

四、若是userinfo沒記錄而且沒開啓uc直接  exit(-1),用戶不存在了

如今到了最後一步,也是前面說的爲何在ucenter中修改密碼後會提示密碼錯誤了

if(   !empty($userinfo) && $userinfo['password'] == create_password($this->password, $userinfo['random'])) {

//登陸成功更新用戶最近登陸時間和ip

$this->db->update(array('lastdate'=>SYS_TIME, 'lastip'=>ip()), array('uid'=>$userinfo['uid']));

exit(serialize($userinfo));

} else {

exit('-2');

}

你們能夠看到這一步會將pre_phpsso_member中的密碼跟傳遞過來的密碼進行校對,也就是說若是登錄時輸入的密碼若是跟pre_phpsso_member不一致,哪怕ucenter校驗經過了,這裏依然會報告密碼錯誤可是ucenter會正常登錄。

總結:由以上可知,咱們在作大型門戶的常常會碰到多系統的問題,通常狀況下會整合UCENTER,掛N個系統,論壇,百科,新聞系統,人才系統……,二三十個系統也可能不在話下,這個時候咱們會常常發現用戶名雖然贊成了,可是密碼是沒統一的狀況,

相關文章
相關標籤/搜索