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里面。






浙公网安备 33010602011771号