专注于WEB技术的IT博客

ThinkPHP3.1.2整合UCenter详解(四)

时间:2013-01-25分类: Thinkphp浏览:6592
分享到:

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

public function uc_login($username, $password){ 
    list($uid, $username, $password, $email) = uc_user_login($username, $password); 
        if($uid > 0) { 
              
            return array( 
                        'uid'           =>   $uid, 
                        'username'      =>   $username, 
                        'password'      =>   $password, 
                        'email'         =>   $email
                        ); 
        } elseif($uid == -1) { 
            return  '用户不存在,或者被删除'; 
        } elseif($uid == -2) { 
            return '密码错误'; 
        } elseif($uid == -3) { 
            return '安全提问错误'; 
        } else { 
            return '未定义'; 
        } 
    }

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

public function uc_synlogin($uid){ 
      
        return uc_user_synlogin($uid); 
    }

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

public function checkLogin() { 
          
        if(!$_POST['username']) $this->error('帐号错误!'); 
        if(!$_POST['password']) $this->error('密码错误!'); 
        if(empty($_POST['verify'])) $this->error('验证码必须!'); 
         import("@.ORG.UcService");//导入UcService.class.php类 
        $ucService = new UcService; 
        $uidarray = $ucService->uc_login($_POST['username'], $_POST['password']); 
        //dump($uidarray); 
        $loginurl=$ucService->uc_synlogin($uidarray); 
        echo $loginurl;//输出同步登录代码,否则无法同步登录 
         if(!is_string($uidarray)){ 
          
        //生成认证条件 
        $map            =   array(); 
        // 支持使用绑定帐号登录 
        $map['username']    = $_POST['username']; 
        $map["status"]  =   array('gt',0); 
        if($_SESSION['verify'] != md5($_POST['verify'])) { 
            $this->error('验证码错误!'); 
        } 
          
        $memberinfo=$this->Member->where($map)->find(); 
          
          
        if(false === $memberinfo) { 
            $this->error('帐号不存在或已禁用!'); 
        }elseif($memberinfo['status']==0){ 
            $this->error('帐号已禁用!'); 
          
        }else { 
            $password = pwdHash($_POST['password']); 
            if($memberinfo['password'] != $password) { 
                $this->error('密码错误!'); 
            } 
            session(C('USER_AUTH_KEY'), $memberinfo['id']); 
            session('email', $memberinfo['email'] ); 
            session('loginUserName', $memberinfo['loginUserName']); 
            session('lastLoginTime', $memberinfo['lastLoginTime']); 
            session('loginnum', $memberinfo['loginnum']); 
            session('lastloginip', $memberinfo['lastloginip']); 
              
            //保存登录信息(相当于更新信息) 
            $data = array(); 
            $data['id'] =   $memberinfo['id']; 
            $data['lastlogintime']  =   time(); 
            $data['loginnum']   =   array('exp','loginnum+1'); 
            $data['lastloginip']    =   get_client_ip(); 
            //$data['verify']   =   $authInfo['verify']; 
            $this->Member->save($data); 
             $this->success('登录成功!',U('Member/index')); 
  
        } 
        } 
    }

我们来看一下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) "qq@qq.com"
}


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


  

猜你喜欢
ThinkPHP自定义模板标签详解
wblog3.1.3_2升级说明
ThinkPHP普通分组下Widget的使用
如何让ThinkPHP的模板引擎达到最佳效率
WBlog博客前台独立栏目页的实现方法
WB3.1.2_2版本使用说明
封装ThinkPHP的一个文件上传方法
ThinkPHP3.1.2整合UCenter详解(三)
ThinkPHP3.1.2整合UCenter详解(二)
ThinkPHP3.1.2整合UCenter详解(一)
标签 : thinkphp UCenter
除非注明,本文首发网志博客,欢迎转载!转载请注明本文地址:http://w3note.com/web/74.html,谢谢。
  • 评论
  • 赞助本站