您的位置:首页 > 编程语言 > PHP开发

ThinkPHP3.1.2整合UCenter详解(四)

2016-03-25 18:15 519 查看
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) "qq@qq.com"

}

下一步就是以此$uidarray作为参数传给同步登录方法uc_synlogin($uidarray),最后echo 一下uc_synlogin($uidarray)的返回值$loginurl,就可以实现帐号"qqabc"在UCenter登录了。帐号"qqabc"在UCenter登录成功后程序将继续往下执行项目W3note的登录,这里就不多说了。最后的结果是,帐号"qqabc"实现了在UCenter和项目W3note的同步登录!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: