Yii整合ucenter实现单点登录

原文:http://www.php2.cc/article-1349-1.html


准备工作
1.下载ucenter源码,并安装好
2.下载ucenter开发源码,根据自己的项目下载对应版本(utf-8

ucenter-utf-8.rar

,gbk

ucenter-gbk.rar



解压好之后,在里面能够看到三个文件夹与一个文件,全部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项目,进入目录:protectedvendor

在里面创建一个文件: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里面。

注:好久没有发过原创的技术博文了,今天编辑完,感觉超爽!


PHP技术交流QQ群:422137578 

除非注明,文章均为 PHP二次开发网 原创,转载请注明本文地址: http://www.php2.cc/article-1349-1.html

原文地址:https://www.cnblogs.com/dingxiaoyue/p/4926730.html