Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

已解决 论坛注册和qq注册 其它平台直接同步的问题 不用重新登陆

[复制链接]
manpai 发表于 2011-7-8 19:37:18 | 显示全部楼层 |阅读模式
本帖最后由 manpai 于 2011-11-11 04:13 编辑

在论坛里找了好久 发现都没有相关的解决办法 其实很简单
大家可以测试 http://www.k728.com/
在论坛注册 和QQ注册时 dz没有向uc发送同步登陆指令 uc_user_synlogin($uid)
修改class_member.php文件
在810行左右
$param = array('bbname' => $this->setting['bbname'], 'username' => $_G['username'], 'usergroup' => $_G['group']['grouptitle'], 'uid' => $_G['uid']);
   if(strpos($url_forward, $this->setting['regname']) !== false || strpos($url_forward, 'buyinvitecode') !== false) {
    $url_forward = 'forum.php';
   }

下增加
$ucsynlogin = $this->setting['allowsynlogin'] ? uc_user_synlogin($_G['uid']) : ''; //这句


然后将
'$(\'succeedlocation\').innerHTML = \''.lang('message', $locationmessage).'\';'.
    '</script>',
修改为
'$(\'succeedlocation\').innerHTML = \''.lang('message', $locationmessage).'\';'.
    '</script>'.$ucsynlogin,

保存上传 在注册的时候就能发送同步登陆的指令了

还有一个问题就是第三方 这时还没有用户的资料 收到同步指令也无法登陆  所以还要修改 第三方的uc.app.php文件 在接收到同步登陆时 自动拉取uc里的用户资料。
下面以ecmall为例:

/* 同步登陆 */
    function synlogin($get, $post) {
        $uid = $get['uid'];
        $username = $get['username'];
        if(!API_SYNLOGIN) {
            return API_RETURN_FORBIDDEN;
        }
        //note 同步登录 API 接口
        $ec_user = $this->user_mod->get($uid);
        if ($ec_user)
        {
            $this->_do_login($ec_user['user_id']);
        }
  ///////////////////////
  else{
   /* 同步到本地 */
        $this->_local_sync($uid, $username, $get['email']);
    //note 同步登录 API 接口 再次同步
    $ec_user = $this->user_mod->get($uid);
    if ($ec_user)
    {
     $this->_do_login($ec_user['user_id']);
    }
  
   
   }
   ///////////////////////////////
        return API_RETURN_SUCCEED;
    }

//////////这里面表示是我加的

然后将

////////////////////////////
  function _local_add($data)
    {
        $model_member =& m('member');
        $user_id = $model_member->add($data);
        if (!$user_id)
        {
            $this->_errors = $model_member->get_error();
            return 0;
        }
        return $user_id;
    }
function _local_get($conditions)
    {
        $model_member =& m('member');
        return $model_member->get($conditions);
    }
function _local_sync($user_id, $user_name, $email)
    {
        /* 本地保持同步 */
          $local_info = $this->_local_get($user_id);
  
        if (empty($local_info))
        {
   
   $user_info = outer_call('uc_get_user', array($user_id, 1));
   if (empty($user_info))
   {
    $this->_error('no_such_user');

    return false;
   }
   list($user_id, $user_name, $email) = $user_info;
   
            /* 有可能在用户中心有而本地没有,这时要将其加上 */
            $data = array(
                'user_id'   => $user_id,
                'user_name' => $user_name,
                'password'  => md5(time() . rand(100000, 999999)),
                'email'     => $email,
                'reg_time'  => gmtime()
            );
            $this->_local_add($data);
        }
    }


///////////////////////////

复制到api.base.php  里   class ApiApp extends ECBaseApp这个类里面
注意 在这个文件顶部<? php 下要加上这句
include (ROOT_PATH . '/uc_client/client.php');//原来没

使$user_info = outer_call('uc_get_user', array($user_id, 1));生效

就可以了
其它平台可以参考这个方面实现直正一键全站能 的效果


补充一下 有关ecmall 关闭浏览器后用户退出而论坛用户没有退出 这时 请求的登陆不能成功
所以在ecmall 点击登陆之前执行一下退出操作

<script>
function QQ_login()
{
var iframe = document.createElement("iframe");  
iframe.src = "http://bbs.k728.com/member.php?mod=logging&action=logout";  
if (iframe.attachEvent){  
    iframe.attachEvent("onload", function(){  
     window.location.href="http://www.k728.com/u/connect.php?mod=login&op=init&referer=../&statfrom=login_simple";
});  
}
else {  
    iframe.onload = function(){  
     window.location.href="http://www.k728.com/u/connect.php?mod=login&op=init&referer=../&statfrom=login_simple";
    }
}  
document.body.appendChild(iframe);
$("iframe").css("height","0");
}

</script>

<a href="javascriptQ_login();">QQ登陆</a>



J.ason 发表于 2011-7-8 19:40:23 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| manpai 发表于 2011-7-8 19:53:20 | 显示全部楼层
本帖最后由 manpai 于 2011-7-8 19:54 编辑
J.ason 发表于 2011-7-8 19:40
第一个


到api.base.php  里 class ApiApp extends ECBaseApp
回复

使用道具 举报

yanggang_01124 发表于 2011-7-14 15:40:47 | 显示全部楼层
api.base.php ,这个文件在哪?找不到呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-24 09:05 , Processed in 0.027020 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表