如何修改源代碼——記如何屏蔽phpcms郵箱驗證

既然題目說的這麼大,那就從頭開始說。
phpcms用戶註冊中,是要求填寫郵箱的。如何屏蔽掉費了很多腦細胞。不錯,百度,google是最好的老師。不過,這個老師對於這些商業性的東西仍是知之甚少。
好比這個問題,搜來搜去就搜到幾個帖子。
其中一個是這麼說的:
在member - index - register函數中,有這麼一句
………………………………
if(pc_base::load_config('system', 'phpsso')) {
                                $this->_init_phpsso();
                                $status = $this->client->ps_member_register($userinfo['username'], $userinfo['password'], $userinfo['email'], $userinfo['regip'], $userinfo['encrypt']);

                          if($status > 0) {
…… ……………………
由於email驗證不經過,下面的代碼沒法進行,這麼,他提出了:將status強制賦值爲1,問題解決。
我用這個方法改完後,在win7下確實解決了問題。(後來才知道我那個真是莫名其妙)
可是,在ubuntu下的服務器就沒那麼幸運了,這樣確實能註冊,可是註冊完畢後,  v9_member`    這個表裏面,phpssouid這個字段全部的值都是1.
仔細查看代碼:
131行:$userinfo['phpssouid'] = $status;      也就是說,這個字段決定了phpssouid值,可是這個值又決定着登陸時的搜索。

因此,咱們的方法是不行的。 php

<!-----------------相信你們都認識我,我是淫蕩的分割線----------------> 數據庫

既然以前的方法是不行的,那麼咱們就刨根問底,看看$status是怎麼來的。
$status = $this->client->ps_member_register($userinfo['username'], $userinfo['password'], $userinfo['email'], $userinfo['regip'], $userinfo['encrypt']);
那麼,咱們去找這個函數去。$this->client->ps_member_register說明它在
\phpcms\modules\member\classes\client.class.php中。查找它在第26行。
這裏和email有關的有兩個:
一個是_is_email,會返回-3,一個是_ps_send函數。
直接查找  _is_email函數,在445行,直接return true算了。(其實更好的是將_is_email函數屏蔽)。
那看下return $this->_ps_send('register', array('username'=>$username, 'password'=>$password, 'email'=>$email, 'regip'=>$regip, 'random'=>$random));
        
繼續查找_ps_send,314行,好吧,看一眼就知道,咱們還得查兩個,一個是_ps_post,330行,單純的post。
還有一個就是/index.php?m=phpsso&c=index&a=".$action  ,也就是說,send也是一個基本函數。去找action吧。
//m=phpsso&c=index&a=register
打開\modules\phpsso\index.php,找到register函數。
很明顯,54行有個check email函數。上面的註釋也說的很明白,返回-2,爲郵箱重複,查找返回-2的。
525行,查找函數註釋:返回-1爲郵箱存在。
從頭看這個函數,開始的時候,驗證,爲空則返回重複-1.
最後有個數據庫檢查$r = $this->db->get_one(array('email'=>$this->email));
有則爲-1.
因爲這裏改動較多,並且咱們的需求是不要郵箱驗證。那麼,從上面去掉註冊時的檢查就行了。
還記得麼,剛纔的那個函數,54行check email,註釋掉吧,這樣,郵箱驗證ok。
ubuntu

因爲原電腦不在身邊,至今不知道爲何原系統能正常註冊…… 服務器

相關文章
相關標籤/搜索