热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第三方从UC账号免激活异步登录DX2.5方法

为什么80%的码农都做不了架构师?最近刚好需要一个结合UC并使用了DX2.5的方案,发现DX2.5官方只提供允许登录自动激活的功能(

为什么80%的码农都做不了架构师?>>>   hot3.png

最近刚好需要一个结合UC并使用了DX2.5的方案,发现DX2.5官方只提供允许登录自动激活的功能( 这选项在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);}}
}


转:https://my.oschina.net/kacper/blog/83304



推荐阅读
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • 本文介绍了如何在 Vue 3 组合 API 中正确设置 setup() 函数的 TypeScript 类型,以避免隐式 any 类型的问题。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • 如何在PHP中准确获取服务器IP地址?
    如何在PHP中准确获取服务器IP地址? ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • 本文作为探讨PHP依赖注入容器系列文章的开篇,将首先通过具体示例详细阐述依赖注入的基本概念及其重要性,为后续深入解析容器的实现奠定基础。 ... [详细]
  • 本文介绍了一种利用PHP cURL库高效提取Sohu邮箱联系人列表的方法。通过设置错误报告级别、定义Cookie文件路径等关键步骤,确保了代码的稳定性和可靠性。经过实际测试,该方法在2012年3月24日被验证为有效,能够快速准确地获取联系人信息。此外,文章还提供了详细的代码示例和注意事项,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文详细探讨了 jQuery 中 `ajaxSubmit` 方法的使用技巧及其应用场景。首先,介绍了如何正确引入必要的脚本文件,如 `jquery.form.js` 和 `jquery-1.8.0.min.js`。接着,通过具体示例展示了如何利用 `ajaxSubmit` 方法实现表单的异步提交,包括数据的发送、接收和处理。此外,还讨论了该方法在不同场景下的应用,如文件上传、表单验证和动态更新页面内容等,提供了丰富的代码示例和最佳实践建议。 ... [详细]
  • 在PHP的设计中,预定义了9个超级全局变量、8个魔术变量和13个魔术函数,这些变量和函数无需声明即可在脚本的任意位置使用。这些特性在PHP开发中极为常见,能够显著提升开发效率和代码的灵活性。相比之下,Java并没有类似的内置机制,但通过其他方式如上下文对象和反射机制,也可以实现类似的功能。本文将详细探讨这两种语言中这些特殊变量和函数的使用方法及其应用场景。 ... [详细]
  • 本课程详细介绍了如何使用Python Flask框架从零开始构建鱼书应用,涵盖高级编程技巧和实战项目。通过视频教学,学员将学习到Flask的高效用法,包括数据库事务处理和书籍交易模型的实现。特别感谢AI资源网提供的课程下载支持。 ... [详细]
  • 在前一篇文章中,我们介绍了如何使用Requests库发送GET请求。本文将深入探讨如何通过Requests库发送POST请求,包括参数格式、请求封装等关键技巧,并通过“历史上的今天”API实例进行详细说明。 ... [详细]
author-avatar
灬毋黑色灬_447
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有