第三方从UC账号免激活异步登录DX 2.5 方法
2013-01-10 17:26
453 查看
最近刚好需要一个结合UC并使用了DX2.5的方案,发现DX2.5官方只提供允许登录自动激活的功能(
这选项在DX管理中心->站长 -> UCENTER设置),等于通过UC注册的账号,仍必须在DX2.5登录一次,才能自动激活账号,这样其它基于UC的其它应用,才能实现异步登录。
以下方法解决第三方应用登录,同时异步登录DX2.5,,已在DX2.5+UC1.6+开发的第三方应用中测试通过。
只是简单实现登录
经过DX 2.5 测试上面之方法,发现用户的邮箱只能写入Ucenter并没有同步到Discuz中,然今日找到解决之方法,共享给兄弟们
这选项在DX管理中心->站长 -> UCENTER设置),等于通过UC注册的账号,仍必须在DX2.5登录一次,才能自动激活账号,这样其它基于UC的其它应用,才能实现异步登录。
以下方法解决第三方应用登录,同时异步登录DX2.5,,已在DX2.5+UC1.6+开发的第三方应用中测试通过。
api/uc.php
function synlogin($get, $post) { global $_G; if(!API_SYNLOGIN) { return API_RETURN_FORBIDDEN; } header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'); $cookietime = 31536000; $uid = intval($get['uid']); if(($member = getuserbyuid($uid, 1))) { dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime); } }改成:
function synlogin($get, $post) { global $_G; if(!API_SYNLOGIN) { return API_RETURN_FORBIDDEN; } header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'); $cookietime = 31536000; $uid = intval($get['uid']); if(($member = getuserbyuid($uid, 1))) { dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime); } /**以下代码是新添加**/ else{ $init_arr = explode(',', $_G['setting']['initcredits']); $groupid = $_G['setting']['regverify'] ? 8 : $_G['setting']['newusergroupid']; C::t('common_member')->insert($uid, $get['username'], md5(random(10)), $get['email'], $_G['clientip'], $groupid, $init_arr); C::t('common_member_status')->update($uid, array('lastip' => $_G['clientip'], 'lastvisit' =>TIMESTAMP, 'lastactivity' => TIMESTAMP)); if(($member = getuserbyuid($uid, 1))) { dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime); } } /**到这里新增代码结束**/ }如果要符合DX2.5后台的自动激活选项,要改成这样:
function synlogin($get, $post) { global $_G; if(!API_SYNLOGIN) { return API_RETURN_FORBIDDEN; } header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'); $cookietime = 31536000; $uid = intval($get['uid']); if(($member = getuserbyuid($uid, 1))) { dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime); } else{ if($_G['setting']['fastactivation']){ $init_arr = explode(',', $_G['setting']['initcredits']); $groupid = $_G['setting']['regverify'] ? 8 : $_G['setting']['newusergroupid']; C::t('common_member')->insert($uid, $get['username'], md5(random(10)), $get['email'], $_G['clientip'], $groupid, $init_arr); C::t('common_member_status')->update($uid, array('lastip' => $_G['clientip'], 'lastvisit' =>TIMESTAMP, 'lastactivity' => TIMESTAMP)); if(($member = getuserbyuid($uid, 1))) { dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime); } } } }
只是简单实现登录
经过DX 2.5 测试上面之方法,发现用户的邮箱只能写入Ucenter并没有同步到Discuz中,然今日找到解决之方法,共享给兄弟们
function synlogin($get, $post) { global $_G; if(!API_SYNLOGIN) { return API_RETURN_FORBIDDEN; } header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'); $cookietime = 31536000; $uid = intval($get['uid']); $query = DB::query("SELECT uid, username, password FROM ".DB::table('common_member')." WHERE uid='$uid'"); if($member = DB::fetch($query)) { dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime); }else{ //用户不存在 从UC里取用户 $username = $get['username']; $query = DB::query("SELECT uid,username,password,email FROM ".DB::table('ucenter_members')." WHERE username='$username'"); $member = DB::fetch($query); $password = $member['password']; $email = $member['email']; $ip = $_SERVER['REMOTE_ADDR']; $time = time(); $userdata = array( 'uid' => $uid, 'username' => $username, 'password' => $password, 'email' => $email, 'adminid' => 0, 'groupid' => 10, 'regdate' => $time, 'credits' => 0, 'timeoffset' => 9999 ); DB::insert('common_member', $userdata); $status_data = array( 'uid' => $uid, 'regip' => $ip, 'lastip' => $ip, 'lastvisit' => $time, 'lastactivity' => $time, 'lastpost' => 0, 'lastsendmail' => 0, ); DB::insert('common_member_status', $status_data); DB::insert('common_member_profile', array('uid' => $uid)); DB::insert('common_member_field_forum', array('uid' => $uid)); DB::insert('common_member_field_home', array('uid' => $uid)); DB::insert('common_member_count', array('uid' => $uid)); DB::query("UPDATE ".DB::table('common_setting')." SET svalue='$username' WHERE skey='lastmember'"); $query = DB::query("SELECT uid, username, password FROM ".DB::table('common_member')." WHERE uid='$uid'"); if($member = DB::fetch($query)) { dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime); } } }
相关文章推荐
- 第三方从UC账号免激活异步登录DX 3.1 方法
- 使用QQ登录出现错误代码:100044,腾讯QQ第三方登录,测试账号使用
- 第三方账号登录------微信
- Win8登录后提示使用临时账号的解决方法
- Android登录界面账号密码输入框选中时,选中背景变换的实现方法
- 淘宝账号基于OAuth2.0的登录验证授权登陆第三方网站
- discuz免激活同步登入代码修改方法(discuz同步登录)
- 数据库修改密码多种方法及设置远程登录账号
- 四种第三方登录的方法
- PHP 第三方调用 UC_Center用户登录认证
- 接入ShareSDK第三方登录和分享遇到的问题以及解决方法
- 【Android】第三方QQ账号登录的实现
- 查看APK的签名的方法,和应用商店更改签名导致第三方无法登录问题
- 关于第三方平台账号的授权登录中的一些概念
- Discuz!X3.2 uc_server密码正确无法登录的解决方法
- eclipse 中main()函数中的String[] args如何使用?通过String[] args验证账号密码的登录类?静态的主方法怎样才能调用非static的方法——通过生成对象?在类中制作一个方法——能够修改对象的属性值?
- PHP版微信第三方实现一键登录及获取用户信息的方法
- java 同步调用第三方sdk提供异步监听方法
- Discuz!X3.2 uc_server密码正确无法登录的解决方法
- 第三方QQ账号登录的实现