找回密码
 注册加入

扫一扫,极速登录

QQ登录

只需一步,快速开始

搜索
查看: 9627|回复: 0

第三方应用从UC账号免激活异步登录Discuz方法

[复制链接]
TA的专栏
发表于 2013-3-22 13:02:37 | 显示全部楼层 |阅读模式
        最近刚好需要一个结合UC并使用了DX2.5的方案,发现DX2.5官方只提供允许登录自动激活的功能(这选项在DX管理中心->站长 -> UCENTER设置),等于通过UC注册的账号,仍必须在DX2.5登录一次,才能自动激活账号,这样其它基于UC的其它应用,才能实现异步登录。

以下方法解决第三方应用登录,同时异步登录DX2.5,,已在DX2.5+UC1.6+开发的第三方应用中测试通过。

非官方解决方法:

修改dx2.5目录下的api/uc.php
找到以下代码:
  1. function synlogin($get, $post) {
  2.                     global $_G;

  3.                     if(!API_SYNLOGIN) {
  4.                             return API_RETURN_FORBIDDEN;
  5.                     }

  6.                     header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

  7.                     $cookietime = 31536000;
  8.                     $uid = intval($get['uid']);
  9.                     if(($member = getuserbyuid($uid, 1))) {
  10.                             dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);
  11.                     }
  12.             }
复制代码
改成:
  1.      function synlogin($get, $post) {
  2.                     global $_G;

  3.                     if(!API_SYNLOGIN) {
  4.                             return API_RETURN_FORBIDDEN;
  5.                     }

  6.                     header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

  7.                     $cookietime = 31536000;
  8.                     $uid = intval($get['uid']);
  9.                     if(($member = getuserbyuid($uid, 1))) {
  10.                             dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);
  11.                     }
  12.     /**以下代码是新添加**/
  13.                     else{
  14.                             $init_arr = explode(',',  $_G['setting']['initcredits']);
  15.                             $groupid =  $_G['setting']['regverify'] ? 8 :  $_G['setting']['newusergroupid'];

  16.                             C::t('common_member')->insert($uid, $get['username'], md5(random(10)), $get['email'], $_G['clientip'], $groupid, $init_arr);
  17.                             C::t('common_member_status')->update($uid, array('lastip' => $_G['clientip'], 'lastvisit' =>TIMESTAMP, 'lastactivity' => TIMESTAMP));
  18.                             if(($member = getuserbyuid($uid, 1))) {
  19.                                     dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);
  20.                             }
  21.                     }
  22.     /**到这里新增代码结束**/
  23.             }
复制代码
如果要符合DX2.5后台的自动激活选项,要改成这样:
  1.      function synlogin($get, $post) {
  2.                     global $_G;

  3.                     if(!API_SYNLOGIN) {
  4.                             return API_RETURN_FORBIDDEN;
  5.                     }

  6.                     header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

  7.                     $cookietime = 31536000;
  8.                     $uid = intval($get['uid']);
  9.                     if(($member = getuserbyuid($uid, 1))) {
  10.                             dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);
  11.                     }
  12.                     else{
  13.                             if($_G['setting']['fastactivation']){
  14.                                     $init_arr = explode(',',  $_G['setting']['initcredits']);
  15.                                     $groupid =  $_G['setting']['regverify'] ? 8 :  $_G['setting']['newusergroupid'];

  16.                                     C::t('common_member')->insert($uid, $get['username'], md5(random(10)), $get['email'], $_G['clientip'], $groupid, $init_arr);
  17.                                     C::t('common_member_status')->update($uid, array('lastip' => $_G['clientip'], 'lastvisit' =>TIMESTAMP, 'lastactivity' => TIMESTAMP));
  18.                                     if(($member = getuserbyuid($uid, 1))) {
  19.                                             dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);
  20.                                     }
  21.                             }
  22.                     }
  23.             }
复制代码
只是简单实现登录,不保证有没有其它的风险存在。慎用。后果自负。
您需要登录后才可以回帖 登录 | 注册加入  

本版积分规则

Archiver|手机版|小黑屋|Discuz!扩展中心 ( 浙ICP备14042422号-1 )|网站地图QQ机器人

GMT+8, 2024-3-29 06:33 , Processed in 0.519466 second(s), 15 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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