thinkphp和ucenter做会员整合的流程讲解

2015-05-18 15:47:42

thinkphp和ucenter做会员整合的流程讲解:

今天在所做的项目中需要中遇到ucenter与 thinkphp要对会员进行整合,他在网上查看了一些资料参考没有成功,最主要的原因是从ucenter1.6中下载后在复制 advanced\examples\api\下的uc.php时里面的路径没有修改OK,下面就详细说一下

1、打开ucenter的后窗口在应用中添加所需要的应用,这里不详细说了,就按ucenter中的提示添写即可,关键是在添加完成以后要复制如下的内容
如图:

thinkphp和ucenter做会员整合的流程讲解 - 灬慕容帥 - 灬慕容帥

然后在ucenter1.6中的advanced\examples\api\中的api目录复制到你所对应的项目根目录下,然后在建立一个conf.ucenter.php配置文件。把应用Ucenter的配置信息复制到该文件,并做相对应的修改,

然后在api/uc.php文件对ucenter引用配置文件的路径做修改

原有的:require_once DISCUZ_ROOT.'./config.inc.php';修改成为你所对应的文件名和路径,(注意:DISCUZ_ROOT这个常量是../相对的路径,根据自己的情况做修改)?

2、把advanced\uc_client中的 uc_client目录复制到项目的根目录,现在到ucenter后台查看通信是失败的,在此纠结了很长时间,查看在api/uc.php文件中有一 行  require_once DISCUZ_ROOT.'./include/db_mysql.class.php';这个。而所在项目中根本找不 到些文件,这是就是受uncentet案例中的影响,要把此行修改成 为    require_once DISCUZ_ROOT.'./uc_client/lib/db.class.php';。是在 uc_client/lib/db.class.php所对应的文件,那么此处修改完了以后还是通信失败的。然后在api/uc.php文件的59号做修 改
原有的:
//$GLOBALS['db'] = new dbstuff;
//$GLOBALS['db']->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, true, $dbcharset);
//$GLOBALS['tablepre'] = $tablepre;
?   修改以后的
$GLOBALS['db'] = new ucclient_db;
$GLOBALS['db']->connect(UC_DBHOST, UC_DBUSER, UC_DBPW, UC_DBNAME, UC_DBCONNECT, true, UC_DBCHARSET);
$GLOBALS['tablepre'] = UC_DBTABLEPRE;
然后保存,现在返回到ucenter后台中的应用列表中查看是通信成功的。

那么通信成功以后,下面接着书写同步登录和同步注册的步骤:

1、同步注册?

在lib/org/目录下创建一个文件,UcService.php,在此文件中书写代码:

 

class UcService{

    public function __construct(){

    //BASE_PATH在入品的配置文件中建立一个常量,并赋值define('BASE_PATH',dirname(__FILE__));

    require_once BASE_PATH . '/config_ucenter.php';

    require_once BASE_PATH . '/uc_client/client.php';

    }

         

    /*

      * 会员注册

      **/

    public function register($username, $password, $email){

        $uid = uc_user_register($username, $password, $email);//UCenter的注册验证函数

        if($uid <= 0) {

            if($uid == -1) {

            return '用户名不合法';

            } elseif($uid == -2) {

            return '包含不允许注册的词语';

            } elseif($uid == -3) {

            return '用户名已经存在';

            } elseif($uid == -4) {

            return 'Email 格式有误';

            } elseif($uid == -5) {

            return 'Email 不允许注册';

            } elseif($uid == -6) {

            return '该 Email 已经被注册';

            } else {

            return '未定义';

            }

        } else {

            return intval($uid);//返回一个非负数

        }

    }

    /*

     * 会员登录

     * */

    public function uc_login($username, $password){

        list($uid, $username, $password, $email) = uc_user_login($username, $password);

        if($uid > 0) {

            return array(

            'uid' => $uid,

            'username' => $username,

            'password' => $password,

            'email' => $email

            );

        } elseif($uid == -1) {

            return '用户不存在,或者被删除';

        } elseif($uid == -2) {

            return '密码错误';

        } elseif($uid == -3) {

            return '安全提问错误';

        } else {

            return '未定义';

        }

    }

    public function uc_synlogin($uid){

        return uc_user_synlogin($uid);

    }

/*

   * 会员退出

   * */

   public function uc_user_logout(){

    setcookie('Example_auth', '', -86400);

        //生成同步退出的代码

        $ucsynlogout = uc_user_synlogout();

        return $ucsynlogout;

   }

  

}

然后在lib/Action下建立MemberAction.class.php文件,显示模板在模板中创建注册和登录页面就不说了。在这里贴出注册和登录的代码

public function index(){

    if(!empty($_COOKIE['Example_auth'])) {

        list($Example_uid, $Example_username) = explode("\t", uc_authcode($_COOKIE['Example_auth'], 'DECODE'));

    }else {

        $Example_uid = $Example_username = '';

    }

    if(!$Example_username) {

    //用户未登录

    echo "<a href="http://murongshuai.blog.163.com/.U('Index/memlogin').">登录</a> ";

    echo "<a href="http://murongshuai.blog.163.com/.U('Index/memberreg').">注册</a> ";

    } else {

    //用户已登录

    dump($Example_uid);

    dump($Example_username);

    echo " <a href="http://murongshuai.blog.163.com/.U('Index/mem_loginout').">退出</a> ";

     

    }

    }

public function addmember(){

       if($this->isPost()){

       $username = $_POST['me_username'];

       $email = $_POST['me_email'];

       $password = trim($_POST['me_password']);

       import('@.Org.UcService');//导入第三方类文件

       $ucService = new UcService;//实例化UcService类

       $uid = $ucService->register($username, $password, $email);//注册到UCenter

           if(is_numeric($uid)){//如果上面注册成功将返回一个int类型的数字

               $M = D('Member');

               if ($vo = $M->create()) {

                   if ($M->add()) {

                        $this->success('注册成功!');

                    } else {

                        $this->error('注册失败!');

                   }

                } else {

                    $this->error();

                }

           }else{

               exit($uid);

           }

       }else{

           $this->error('非法数据!');

       }

   }

   /*

    * 会员登录

    * */

   public function memlogin(){

       $this->display();

   }

   public function checkLogin() {

   if(!$_POST['me_username']) $this->error('帐号错误!');

       if(!$_POST['me_password']) $this->error('密码错误!');

       if(empty($_POST['verify'])) $this->error('验证码必须!');

       import('@.Org.UcService');//导入第三方类文件

       $ucService = new UcService;

       $uidarray = $ucService->uc_login($_POST['me_username'], $_POST['me_password']);

       $loginurl=$ucService->uc_synlogin($uidarray['uid']);

       echo $loginurl;//输出同步登录代码,否则无法同步登录

       if(!is_string($uidarray)){

       //生成认证条件

       $map = array();

       // 支持使用绑定帐号登录

       $map['me_username'] = $_POST['me_username'];

     $map["status"] = array('gt',0);

     if($_SESSION['verify'] != md5($_POST['verify'])) {

      $this->error('验证码错误!');

      }

      $mem_M = M('Member');

      $memberinfo=$mem_M->where($map)->find();

      if(false === $memberinfo) {

      $this->error('帐号不存在或已禁用!');

     }elseif($memberinfo['status']==0){

     $this->error('帐号已禁用!');

      }else {

      $password = md5($_POST['me_password']);

      if($memberinfo['me_password'] != $password) {

      $this->error('密码错误!');

      }

    //用户登陆成功,设置 Cookie,加密直接用 uc_authcode 函数,用户使用自己的函数

    cookie('Example_auth', uc_authcode($uidarray['uid']."\t".$uidarray['username'], 'ENCODE'));

    session(C('USERHOME_AUTH_KEY'), $memberinfo['id']);

    session('email', $memberinfo['email'] );

    session('loginUserName', $memberinfo['loginUserName']);

    session('lastLoginTime', $memberinfo['lastLoginTime']);

    session('loginnum', $memberinfo['loginnum']);

    session('lastloginip', $memberinfo['lastloginip']);

       //保存登录信息(相当于更新信息)

       $data = array();

       $data['id'] = $memberinfo['id'];

       $data['lastlogintime'] = time();

       $data['loginnum'] = array('exp','loginnum+1');

       $data['lastloginip'] = get_client_ip();

       //$data['verify'] = $authInfo['verify'];

       $this->Member->save($data);

       $this->success('登录成功!',U('Index/index'));

   }

   }

   }

 public function mem_loginout(){

        if(isset($_SESSION[C('USERHOME_AUTH_KEY')])) {

            //退出Ucenter

        import('@.Org.UcService');//导入第三方类文件

            $ucService = new UcService;

            $ucsynlogout =$ucService->uc_user_logout();

            echo $ucsynlogout;

            unset($_SESSION[C('USERHOME_AUTH_KEY')]);

            unset($_SESSION);

            session_destroy();

            $this->assign("jumpUrl",__URL__);

            $this->success('登出成功!');

        }else {

           $this->success('已经退出');

        }

    }

 

到这里就可以实现同步注册和同步登录同步退出了

点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注