原文: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项目,进入目录:\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里面。



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





PHP技术交流QQ群:422137578 



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

Yii整合ucenter实现单点登录的更多相关文章

  1. ucenter的单点登录

    所谓单点登录,无非就是几个站点共用一个用户中心,实现同步登陆,同步退出. 服务器端:Loog SSO . 客服端: ucenter,说实话dz商业化确实让php发展了不少. ucenter 基本原理: ...

  2. CAS5.3服务器搭建及SpringBoot整合CAS实现单点登录

    1.1 什么是单点登录 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的 ...

  3. java J2EE与DiscuzX3.2的UCenter实现单点登录

    最近笔者在实现Java项目对discuz的整合.在此过程中,查了很多这方面的资料,发现网上并没有说得比较全面的文章.笔者博取众长以及自己在此过程中遇到的问题,写下来供大家参考,希望大家可以在这过程中少 ...

  4. Yii 同域名的单点登录 SSO实现

    SSO (Single Sign-on) 顾名思义就是几个子项目共用一个登录点. 原理简单来说就是服务端session 共享, 客户端跨域cookies. 实现非常简单,protected/confi ...

  5. pac4j探索(一)之buji-pac4j shiro整合Cas实现单点登录

    https://blog.csdn.net/hxm_code/article/details/79181218 https://blog.csdn.net/hxm_code/article/detai ...

  6. SpringSecurity3整合CAS实现单点登录

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  7. 采用CAS原理构建单点登录

    企业的信息化过程是一个循序渐进的过程,在企业各个业务网站逐步建设的过程中,根据各种业务信息水平的需要构建了相应的应用系统,由于这些应用系统一般是在不同的时期开发完成的,各应用系统由于功能侧重.设计方法 ...

  8. java和Discuz论坛实现单点登录,通过Ucenter(用户管理中心)

    标题有点问题,没有进行修改. 一 Discuz论坛搭建步骤 1:服务器环境配置 服务器要支持php语言+支持mysql 5.0以上的数据库 + Apache服务器(支持网站的一个服务器,通过域名的能访 ...

  9. UCenter在JAVA项目中实现的单点登录应用实例

    Comsenz(康盛)的UCenter当前在国内的单点登录领域占据绝对份额,其完整的产品线令UCenter成为了账号集成方面事实上的标准. 基于UCenter,可以将Comsenz旗下的Discuz! ...

随机推荐

  1. 根据Facebook内存的管理使用,浅谈在iOS上自动检测内存泄漏问题

    分装库下载:https://github.com/facebook/FBMemoryProfiler FBMemoryProfiler类库使用教程:http://ifujun.com/fbmemory ...

  2. Github搜索技巧-如何使用github找到自己感兴趣的项目

    Github现在不仅仅作为一个版本控制工具,更是一个开源的仓库,里面不但有优秀的开源代码,电子书,还有一些五花八门的项目,有些国家的法律也放在上面,作为程序员如何找到自己感兴趣的项目就非常重要了! 欢 ...

  3. OpenCV x64 vs2010 下打开摄像头录制视频写成avi(代码为转载)

    首先参照下面这里进行opencv x64位机器下面的配置 http://wiki.opencv.org.cn/index.php/VC_2010%E4%B8%8B%E5%AE%89%E8%A3%85O ...

  4. Objective-C 空指针和野指针

    一.什么是空指针和野指针 1.空指针 1> 没有存储任何内存地址的指针就称为空指针(NULL指针) 2> 空指针就是被赋值为0的指针,在没有被具体初始化之前,其值为0. 下面两个都是空指针 ...

  5. jQuery选择器面试题

    $("#myELement")    选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myElement所以得到的是唯一的元素 $("di ...

  6. Ajax+jquery+jaso传输数据

    所谓的Ajax.这里我们讲二种方法  方法一:(微软有自带Ajax框架)  在Asp.net里微软有自己的Ajax框架.就是在页面后台.cs文件里引入 using System.Web.Service ...

  7. Bash的一些零星笔记

    1.变量带入操作符 在脚本中,使用变量前做检查是很重要的.通过代入操作符,可以实现这方面的功能.比如当变量未赋值时为变量赋默认值,以及更多内容: ${parameter:-默认为空}:当paramet ...

  8. 发现DELL笔记本一个很弱智的问题

    以前用联想的笔记本,最近联想笔记本坏了,用的是公司的DELL笔记本,发现DELL笔记本一个很弱智的问题. 关于禁用触摸板的问题. 起因: 由于要经常写程序,我配置的有有线鼠标,但是打字时经常碰到触摸板 ...

  9. 局部内部类访问它所在方法的局部变量时,要求该局部变量必须声明为final的原因

    这是java的一条规则.那么为什么会有这条规则呢?要想弄懂这个问题,就需要弄懂局部内部类对象和局部变量的生命周期的谁更长的问题. 首先,看一段代码,以没有将变量声明为final的代码作为例子,代码如下 ...

  10. Java学习导航

    由于最近在系统的重新学习Java,为了便于日后复习,给个人博客中Java内容做一个目录. Java基础:Java虚拟机(JVM) Java基础:内存模型 Java基础:JVM垃圾回收算法 Java基础 ...