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值,但是这个值又决定着登录时的搜索。
所以,我们的方法是不行的。
<!-----------------相信大家都认识我,我是淫荡的分割线---------------->
既然之前的方法是不行的,那么我们就刨根问底,看看$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。
由于原电脑不在身边,至今不知道为什么原系统能正常注册……