ThinkPHP3.1.2整合UCenter详解(四)

ThinkPHP3.1.2整合UCenter详解(三)这一章,实现了同步注册的功能,有了帐号我们就可以来做同步登录了。
      打开UcService.class.php文件,添加一个UC登录和一个登出的方法,代码到UCenter接口开发手册的用户接口那里找用户登录示例代码,把它复制过来,然后稍微更改一下,使其带有返回值,以便下一步的操作,代码如下:

01 public function uc_login($username$password){ 
02     list($uid$username$password$email) = uc_user_login($username$password); 
03         if($uid > 0) { 
04                
05             return array
06                         'uid'           =>   $uid
07                         'username'      =>   $username
08                         'password'      =>   $password
09                         'email'         =>   $email
10                         ); 
11         elseif($uid == -1) { 
12             return  '用户不存在,或者被删除'
13         elseif($uid == -2) { 
14             return '密码错误'
15         elseif($uid == -3) { 
16             return '安全提问错误'
17         else 
18             return '未定义'
19         
20     }

继续在用户接口那里找到同步登录的代码示例,找到“uc_user_synlogin($uid);”其作用是执行同步登录,然后写成uc_synlogin方法如下:

1 public function uc_synlogin($uid){ 
2        
3         return uc_user_synlogin($uid); 
4     }

到这里UcService.class.php文件的登录方法已经写好,接下来打开前台W3note项目的控制器MemberAction.class.php文件写一个同步登录的方法,看代码:

01 public function checkLogin() { 
02            
03         if(!$_POST['username']) $this->error('帐号错误!'); 
04         if(!$_POST['password']) $this->error('密码错误!'); 
05         if(empty($_POST['verify'])) $this->error('验证码必须!'); 
06          import("@.ORG.UcService");//导入UcService.class.php类 
07         $ucService new UcService; 
08         $uidarray $ucService->uc_login($_POST['username'], $_POST['password']); 
09         //dump($uidarray); 
10         $loginurl=$ucService->uc_synlogin($uidarray); 
11         echo $loginurl;//输出同步登录代码,否则无法同步登录 
12          if(!is_string($uidarray)){ 
13            
14         //生成认证条件 
15         $map            =   array(); 
16         // 支持使用绑定帐号登录 
17         $map['username']    = $_POST['username']; 
18         $map["status"]  =   array('gt',0); 
19         if($_SESSION['verify'] != md5($_POST['verify'])) { 
20             $this->error('验证码错误!'); 
21         
22            
23         $memberinfo=$this->Member->where($map)->find(); 
24            
25            
26         if(false === $memberinfo) { 
27             $this->error('帐号不存在或已禁用!'); 
28         }elseif($memberinfo['status']==0){ 
29             $this->error('帐号已禁用!'); 
30            
31         }else 
32             $password = pwdHash($_POST['password']); 
33             if($memberinfo['password'] != $password) { 
34                 $this->error('密码错误!'); 
35             
36             session(C('USER_AUTH_KEY'), $memberinfo['id']); 
37             session('email'$memberinfo['email'] ); 
38             session('loginUserName'$memberinfo['loginUserName']); 
39             session('lastLoginTime'$memberinfo['lastLoginTime']); 
40             session('loginnum'$memberinfo['loginnum']); 
41             session('lastloginip'$memberinfo['lastloginip']); 
42                
43             //保存登录信息(相当于更新信息) 
44             $data array(); 
45             $data['id'] =   $memberinfo['id']; 
46             $data['lastlogintime']  =   time(); 
47             $data['loginnum']   =   array('exp','loginnum+1'); 
48             $data['lastloginip']    =   get_client_ip(); 
49             //$data['verify']   =   $authInfo['verify']; 
50             $this->Member->save($data); 
51              $this->success('登录成功!',U('Member/index')); 
52    
53         
54         
55     }

我们来看一下checkLogin()方法的执行过程。


在项目W3note注册的一个帐号,然后在项目W3note提交登录表单后,首先执行UCenter的登录,前面我们写了两个UCenter的登录方法,在调用之前需要使用“import("@.ORG.UcService");”把UcService.class.php文件加载进来,实例化后得到$ucService,然后就可以使用用$ucService访问UCenterr的登录方法uc_login,返回一个$uidarray值,$uidarray包函什么数据?使用“dump($uidarray);”打印出来,以便下一步的操作,打印结果如下:

array(4) {
 ["uid"] => string(1) "1"
 ["username"] => string(5) "qqabc"
 ["password"] => string(6) "123456"
 ["email"] => string(9) "[email protected]"
}


下一步就是以此$uidarray作为参数传给同步登录方法uc_synlogin($uidarray),最后echo 一下uc_synlogin($uidarray)的返回值$loginurl,就可以实现帐号"qqabc"在UCenter登录了。帐号"qqabc"在UCenter登录成功后程序将继续往下执行项目W3note的登录,这里就不多说了。最后的结果是,帐号"qqabc"实现了在UCenter和项目W3note的同步登录!

你可能感兴趣的:(ThinkPHP3.1.2整合UCenter详解(四))