ThinkPHP3.1.2整合UCenter详解(四)
2016-03-25 18:15
519 查看
在ThinkPHP3.1.2整合UCenter详解(三)这一章,实现了同步注册的功能,有了帐号我们就可以来做同步登录了。
打开UcService.class.php文件,添加一个UC登录和一个登出的方法,代码到UCenter接口开发手册的用户接口那里找用户登录示例代码,把它复制过来,然后稍微更改一下,使其带有返回值,以便下一步的操作,代码如下:
继续在用户接口那里找到同步登录的代码示例,找到“uc_user_synlogin($uid);”其作用是执行同步登录,然后写成uc_synlogin方法如下:
到这里UcService.class.php文件的登录方法已经写好,接下来打开前台W3note项目的控制器MemberAction.class.php文件写一个同步登录的方法,看代码:
我们来看一下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的同步登录!
打开UcService.class.php文件,添加一个UC登录和一个登出的方法,代码到UCenter接口开发手册的用户接口那里找用户登录示例代码,把它复制过来,然后稍微更改一下,使其带有返回值,以便下一步的操作,代码如下:
01 | public function uc_login( $username , $password ){ |
02 | list( $uid , $username , $password , ) =uc_user_login( $username , $password ); |
03 | if ( $uid >0) { |
04 |
05 | return array ( |
06 | 'uid' => $uid , |
07 | 'username' => $username , |
08 | 'password' => $password , |
09 | '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 | } |
1 | public function uc_synlogin( $uid ){ |
2 |
3 | return uc_user_synlogin( $uid ); |
4 | } |
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 | } |
在项目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的同步登录!
相关文章推荐
- ThinkPHP3.1.2整合UCenter详解(三)
- ThinkPHP3.1.2整合UCenter详解(二)
- 通过form上传文件(php)
- ThinkPHP3.1.2整合UCenter详解(一)
- php解决约瑟夫问题
- 最大正向匹配算法 PHP实现
- php三种基础算法:冒泡,插入和快速排序法
- thinkphp在新浪SAE平台的部署
- 关于phpstudy安装的问题
- php 写一个水仙花数的函数
- PHP运算符优先级
- PHP实现基本认证
- PHP中与Perl兼容的正则表达式处理函数
- php strcmp 进行字符串二进制比较
- 【php爬虫】百万级别知乎用户数据爬取与分析
- PHP合并数组
- PHP7 扩展之自动化测试
- PHP7 扩展之自动化测试
- 搭建php开发环境
- 四大组件之ContentProvider