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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

第三方从UC账号免激活异步登录DX 2.5 方法

[复制链接]
NecyLus 发表于 2012-8-22 02:35:32 | 显示全部楼层 |阅读模式
本帖最后由 NecyLus 于 2012-8-28 03:12 编辑

很少来DZ的论坛,可能发错栏目,见谅。

最近刚好需要一个结合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.         }
复制代码
只是简单实现登录,不保证有没有其它的风险存在。慎用。后果自负。

2012-08-28 修改
信宁军 发表于 2012-8-22 02:37:50 | 显示全部楼层
支持一下。学到东西了。
回复

使用道具 举报

abcnic18 发表于 2012-8-22 15:16:10 | 显示全部楼层
收藏 学习了 :)
回复

使用道具 举报

cuimin666 发表于 2012-8-25 23:50:24 | 显示全部楼层
太爱你了,解决了我很久以来一直都想解决的问题。收藏+截屏!!!谢谢!!!{:soso__3088022480146998447_4:}
回复

使用道具 举报

sjl0306112 发表于 2012-9-6 16:04:45 | 显示全部楼层
嗯,不错
回复

使用道具 举报

fgncp 发表于 2012-9-10 20:37:20 | 显示全部楼层
做个登记
回复

使用道具 举报

cn8h91 发表于 2012-10-12 15:58:10 | 显示全部楼层
不错,顶!! 解决了我几天訪做的事。
回复

使用道具 举报

joytaobao 发表于 2012-10-22 19:09:33 | 显示全部楼层
现在这个功能在后台能设置
是否允许直接激活:
但是还是需要登录一次才可以激活,只不过是把那个激活按钮省略掉了

这个方法能不能把第一次登录激活步骤省略掉?

用户不用登录,在dzx的后台直接就有UCenter里面的用户信息呢?
回复

使用道具 举报

yecao 发表于 2012-10-26 01:45:01 | 显示全部楼层
测试成功,感谢楼主分享!
回复

使用道具 举报

1987年的调调 发表于 2012-11-16 17:21:13 | 显示全部楼层
好像邮箱没有同步过去只是同步了账号和密码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-17 04:54 , Processed in 0.163537 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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