基于UCenter用户中心把第三方网站的会员与Discuz关联起来(续2)

[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/151/ ]

国庆找了些时间把后边的内容补上​,这一篇主要跟大家讲一下UCenter用户中心的工作原理,然后再简单的分析一下同步登录、同步注销的功能,这样或许会对UCenter有更加清晰的认识.之后大家就可以根据官方的文档定制开发自己需要的功能了.

国庆找了些时间把后边的内容补上,这一篇主要跟大家讲一下UCenter用户中心的工作原理,然后再简单的分析一下同步登录、同步注销的功能,这样或许会对UCenter有更加清晰的认识。之后大家就可以根据官方的文档定制开发自己需要的功能了。

上一篇《基于UCenter用户中心把第三方网站的会员与Discuz关联起来(续1)》,我们的测试代码已经跟UCenter正常通讯了,接下来,就跟大家简述一下,同步登录的流程。假设我们拥有以下几个网站:

A)主营网站

B)Discuz论坛

C)UCenter

1)用户在A登录后,A会向C发送一个登录消息,C收到消息后会把消息转发到与UCenter正常通讯且配置正确的应用。这个例子中,B提供的API会收到登录通知,然后处理登录请求。

2)用户在B登录后,B会向C发送一个登录消息,C收到消息后会把消息转发到与UCenter正常通讯且配置正确的应用。这个例子中,A提供的API会收到登录通知,然后处理登录请求。

根据我们上回的配置,网站的API就是:http://192.168.1.9/uc_test/api/uc.php

接下来,我们就以uc.php这个PHP文件为示例,来说明同步登录与同步注销的功能实现。

if(in_array($get['action'], array('test', 'deleteuser', 'renameuser', 'gettag', 'synlogin', 'synlogout', 'updatepw', 'updatebadwords', 'updatehosts', 'updateapps', 'updateclient', 'updatecredit', 'getcreditsettings', 'updatecreditsettings'))) {
    require_once DISCUZ_ROOT.'./include/db_mysql.class.php';
    $GLOBALS['db'] = new dbstuff;
    $GLOBALS['db']->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, true, $dbcharset);
    $GLOBALS['tablepre'] = $tablepre;
    unset($dbhost, $dbuser, $dbpw, $dbname, $pconnect);
    $uc_note = new uc_note();
    exit($uc_note->$get['action']($get, $post));
} else {
    exit(API_RETURN_FAILED);
}

这段代码先是连接了mysql数据库,并且实例化了一个类,然后根据获取到的action变量调用类中的方法。

例如UCenter中的通信成功,就是因为成功调用uc_note类中的方法test()。

为了验证这一说法,我们在uc.php里添加如下代码,来记录信息,以便之后的调试。

function mlog($log = '',$file = '') {
    if( $file == '' ) $file = 'log.txt';
    $log = print_r($log,true);
    $log = "date:" . date("Y-m-d H:i:s") . "\n{$log}\n";
    file_put_contents($file,$log,FILE_APPEND|LOCK_EX);
}

再修改uc_note的方法test()

function test($get, $post) {
    mlog(1);
    return API_RETURN_SUCCEED;
}

只要通讯成功,api目录下就多出一个log.txt文件,请确保PHP有权限对目录进行操作。

或许你应该猜到了,方法synlogin、synlogout分别对应了同步登录、同步注销。是的,确实是这样。

在synlogin方法中,我们不需要再去验证用户uid、密码什么的,因为用户确实已经验证通过了UCenter才会发送通知请求的。所以我只需要在synlogin添加用户的SESSION信息。如果需要特殊的操作,比如根据UID查询用户状态、是否为会员等信息,可以参考如下代码:

function synlogin($get, $post) {
    $uid = $get['uid'];
    $username = $get['username'];
    if(!API_SYNLOGIN) {
        return API_RETURN_FORBIDDEN;
    }

    $config = include '数据库配置文件';
    $db = new dbstuff;
    $db->connect($config['DB_HOST'], $config['DB_USER'], $config['DB_PWD'], $config['DB_NAME'], $config['CONTENT_COMMENT_OPEN'], true);
    unset($config);
    
    $strSql = "select status,vip from user where uid = $uid ";
    $arrData = $db->fetch_first($strSql);
    
    if( !isset( $_SESSION ) ) session_start();
    $_SESSION['user'] = array(
        'uid' => $uid,
        'username' => $username,
        'status' => $arrData['status'],
        'vip' => $arrData['vip']
    );

    header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
    _setcookie('auth', _authcode($uid."\t".$username, 'ENCODE'));
}

同步注销就更容易了,如果在测试的过程有什么问题,可以用mlog函数来进行调试。

function synlogout($get, $post) {
    if(!API_SYNLOGOUT) {
        return API_RETURN_FORBIDDEN;
    }
    
    if( !isset( $_SESSION ) ) session_start();
    session_destroy();
    
    //note 同步登出 API 接口
    header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
    _setcookie('auth', '', -86400 * 365);
}

上边的同步代码是收到登录、注销通知的相关操作,还差发送登录、注销通知的操作。

其实也很简单,直接看这一段登录通知的代码:

include './uc_client/client.php';
$ucsynlogin = uc_user_synlogin($uid);
echo $ucsynlogin;

$ucsynlogin其实是一段js代码,作用也是调用对应的api接口,达到传递信息的作用。

注销通知:

include './uc_client/client.php';
$ucsynlogout = uc_user_synlogout();
echo $ucsynlogout;

至此,UCenter用户中心的功能就介绍的差不多了,其他的功能,都可以从官方的文档上找到,相信通过这些简单的示例,上手应该就容易些了。

    评论:

    1. themebetter 回复2016年03月17日 13时25分
      磨者
      确实不好找文章,博主如果考虑换换主题的话可以去我们网站看看有合适的没

    2. 磨者 946 回复2017年07月12日 10时08分
      磨者
      irecw.cn
      sghry.cn
      ansheng3j77.cn
      gchunshin3zx.cn
      ainansheng3j77.cn
      shenggyq6.cn
      shin3zx.cn
      shij7p1.cn
      8oqe.cn
      xqhggx.cn
      henggyq6.cn
      9p7n.cn
      nsheng5nv5.cn
      5ii0.cn
      hiv3fn.cn
      wbjgjk.cn
      cbian.pw
      1nfb.cn
      ngshiv3fn.cn
      eng3j77.cn
      shidz9l.cn
      shengv33z.cn
      zshuan.cn
      idz9l.cn
      ng3j77.cn
      cakauw.cn
      ngxisheng1nfb.cn
      ng5nv5.cn
      nsheng4sqm.cn
      v3fn.cn
      engv33z.cn
      hengv33z.cn
      5nv5.cn
      gshiv3fn.cn
      afwth.cn
      wngcxg.cn
      g8oqe.cn
      ushengnjb5.cn
      changchunshin3zx.cn
      angzhoushidz9l.cn
      njb5.cn
      heng5nv5.cn
      shengtn5j.cn
      inghaisheng8oqe.cn
      wekld.cn
      angsushengnjb5.cn
      eng8oqe.cn
      unshin3zx.cn
      nsheng3j77.cn
      nshenggyq6.cn
      izhoushengn1r9.cn
      g5nv5.cn
      ngn1r9.cn
      rlp3.cn
      ij7p1.cn
      zhongqingshiv3fn.cn
      ushirlp3.cn
      gxisheng1nfb.cn
      nnansheng4sqm.cn
      ggyq6.cn
      edxyq.cn
      huansheng5nv5.cn
      oushirlp3.cn
      j7p1.cn
      gshanshi9p7n.cn
      nchangshij7p1.cn

    3. 我来说两句:

        切换  

      磨途歌检测发现,您当前使用的浏览器版本过低,要想使用画板模式,请先更新浏览器

        切换  

      磨途歌随机验证码