Yii整合ucenter实现单点登录
准备工作
1.下载ucenter源码,并安装好
2.下载ucenter开发源码,根据自己的项目下载对应版本(utf-8
,gbk
)
解压好之后,在里面能够看到三个文件夹与一个文件,全部copy到自己的项目根目录。
然后进入ucenter后台,创建应用。
应用类型:选择其他
应用名称:自己填写
应用的主URL:填写yii项目的网址
应用IP:填写yii项目的ip地址
是否开启同步登陆:选择是
是否接受通知:选择是
设置好后,点击提交即可。
提交完成后,查看下面的:应用的UCenter配置信息
将里面的信息全部复制一下。
然后找到yii项目的根目录,找到:config.inc.php
将里面的这段信息:
[代码]php代码:
01 |
define( 'UC_CONNECT' , 'mysql' ); |
02 |
define( 'UC_DBHOST' , 'localhost' ); |
03 |
define( 'UC_DBUSER' , 'root' ); |
04 |
define( 'UC_DBPW' , '123' ); |
05 |
define( 'UC_DBNAME' , 'ucenter' ); |
06 |
define( 'UC_DBCHARSET' , 'utf8' ); |
07 |
define( 'UC_DBTABLEPRE' , '`ucenter`.uc_' ); |
08 |
define( 'UC_DBCONNECT' , '0' ); |
09 |
define( 'UC_KEY' , 'adbejSMW8DCySKMscciI42C0scpGwPvasAy2is4' ); |
10 |
define( 'UC_API' , 'http://127.0.0.1/ucenter' ); |
11 |
define( 'UC_CHARSET' , 'utf-8' ); |
12 |
define( 'UC_IP' , '' ); |
13 |
define( 'UC_APPID' , '4' ); |
14 |
define( 'UC_PPP' , '20' ); |
替换成刚才复制的信息。
然后看下面这段信息:
[代码]php代码:
1 |
$dbhost = 'localhost' ; // 数据库服务器 |
2 |
$dbuser = 'root' ; // 数据库用户名 |
3 |
$dbpw = '123' ; // 数据库密码 |
4 |
$dbname = 'zb_fm926' ; // 数据库名 |
5 |
$pconnect = 0; // 数据库持久连接 0=关闭, 1=打开 |
6 |
$tablepre = '' ; // 表名前缀, 同一数据库安装多个论坛请修改此处 |
7 |
$dbcharset = 'utf8' ; // MySQL 字符集, 可选 'gbk', 'big5', 'utf8', 'latin1', 留空为按照论坛字符集设定 |
将配置信息修改为yii项目的数据库配置信息。
然后进入ucenter后台,点击应用管理,能够看到刚刚添加的应用,后面的通讯情况,显示通讯成功
OK ,初步配置完成。然后开始配置注册于登陆
打开yii项目,进入目录:\protected\vendor
在里面创建一个文件:ucenter.php
其内容如下:
[代码]php代码:
1 |
<?php |
2 |
3 |
$path = dirname( __FILE__ ). '/../../uc_client/' ; |
4 |
require_once ( $path . '../config.inc.php' ); |
5 |
require_once ( $path . 'client.php' ); |
然后找到yii项目注册模块,在注册的流程中加入如下代码($username, $password, $email,需要自行获取):
[代码]php代码:
01 |
//ucenter |
02 |
Yii::import( 'application.vendors.*' ); |
03 |
include_once $homeUrl . 'protected/vendor/ucenter.php' ; |
04 |
05 |
//验证用户名是否存在 |
06 |
$flag = uc_user_checkname( $username ); |
07 |
|
08 |
if ( $flag == -1) |
09 |
{ |
10 |
echo "<script type='text/javascript'>alert('用户名不合法');history.back();</script>" ; |
11 |
//$errMsg='用户名不合法'; |
12 |
exit ; |
13 |
} elseif ( $flag ==-2){ |
14 |
echo "<script type='text/javascript'>alert('包含不允许注册的词语');history.back();</script>" ; |
15 |
//$errMsg='包含不允许注册的词语'; |
16 |
exit ; |
17 |
} elseif ( $flag ==-3){ |
18 |
echo "<script type='text/javascript'>alert('用户名已经存在');history.back();</script>" ; |
19 |
//$errMsg='用户名已经存在'; |
20 |
exit ; |
21 |
} |
22 |
23 |
//验证邮箱是否存在 |
24 |
$flag = uc_user_checkemail( $email ); |
25 |
if ( $flag == -4) |
26 |
{ |
27 |
echo "<script type='text/javascript'>alert('Email 格式有误');history.back();</script>" ; |
28 |
//$errMsg='Email 格式有误'; |
29 |
exit ; |
30 |
} elseif ( $flag ==-5){ |
31 |
echo "<script type='text/javascript'>alert('Email 不允许注册');history.back();</script>" ; |
32 |
//$errMsg='Email 不允许注册'; |
33 |
exit ; |
34 |
} elseif ( $flag ==-6){ |
35 |
echo "<script type='text/javascript'>alert('该 Email 已经被注册');history.back();</script>" ; |
36 |
//$errMsg='该 Email 已经被注册'; |
37 |
exit ; |
38 |
} |
39 |
$uid = uc_user_register( $username , $password , $email ); //注册用户至ucenter |
如果注册成功,$uid返回ucenter注册成功之后的uid,判断是否注册成功,直接用if($uid>0)即可
然后修改登录代码:
在登录流程里面加入($username, $password自行获取):
[代码]php代码:
01 |
//ucenter |
02 |
Yii::import( 'application.vendors.*' ); |
03 |
include_once $homeUrl . 'protected/vendor/ucenter.php' ; |
04 |
05 |
//验证用户名是否存在 |
06 |
$flag = uc_user_checkname( $username ); |
07 |
|
08 |
if ( $flag ==-3) |
09 |
{ |
10 |
|
11 |
} else { |
12 |
echo "<script type='text/javascript'>alert('用户名不存在');history.back();</script>" ; |
13 |
exit ; |
14 |
} |
15 |
|
16 |
//到ucenter验证用户名密码是否正确 |
17 |
list( $uid , $username , $password , $email ) = uc_user_login( $username , $password ); |
18 |
19 |
|
20 |
if ( $uid > 0) |
21 |
{ |
22 |
//这里运行登录成功的代码 |
23 |
//将yii登陆状态同步给其他系统 |
24 |
$success_content = uc_user_synlogin( $uid ); |
25 |
header( "refresh:1;url=/" ); //登录成功,1秒之后跳转。这里需注意,一定要有一个前端页面的跳转,方便用户给ucenter发送登陆成功的信息 |
26 |
echo $success_content ; |
27 |
exit ; |
28 |
} else { |
29 |
//这里运行登录失败的代码 |
30 |
} |
修改注销登陆:
找到注销登陆模块,在注销登录流程加入如下代码:
[代码]php代码:
1 |
//ucenter |
2 |
Yii::import( 'application.vendors.*' ); |
3 |
include_once $homeUrl . 'protected/vendor/ucenter.php' ; |
4 |
|
5 |
//将yii登陆状态同步给其他系统 |
6 |
$success_content =uc_user_synlogout(); |
7 |
header( "refresh:1;url=/public/login" ); //注销完成,1秒之后跳转。这里需注意,一定要有一个前端页面的跳转,方便用户给ucenter发送注销后的信息 |
8 |
echo $success_content ; |
9 |
exit ; |
OK,本次修改主要围绕注销登陆来说的,至于修改用户信息的同步,自己根据自己的代码流程来改吧,所有调用到的函数应该都在:uc_client/client.php里面。