phpcms V9实现QQ登陆OAuth2.0

phpcmsV9使用的QQ登陆依然是OAuth1.0,但现在腾讯已经不审核使用OAuth1.0的网站了。这对于使用pc的站长来讲是一个无比巨大的坑。经过对phpcms论坛的一位同学做的插件进行修改,现在完美实现QQ登陆,暂无发现bug。测试网站:http://www.zuzwn.com

实现步骤:

①打开\phpcms\modules\member\index.php文件,把下面的代码找个地方塞进去(可以直接在pc默认的QQ登陆下面)。

  1 //QQ登陆oAuth2.0
  2
  3 ublic function public_qq_login2(){
  4
  5 $appid = pc_base::load_config(‘system’, ‘qq_appid’);
  6
  7 $appkey = pc_base::load_config(‘system’, ‘qq_appkey’);
  8
  9 $callback = pc_base::load_config(‘system’, ‘qq_callback’);
 10
 11  pc_base::load_app_class(‘qqOAuth2′,”,0);
 12
 13 $info = new qqOAuth2($appid,$appkey,$callback);
 14
 15 $this->_session_start();
 16
 17 if (!isset($_GET[‘code’])){
 18
 19 $info->redirect_to_login();
 20
 21  }else{
 22
 23 $code = $_GET[‘code’];
 24
 25 $_SESSION[‘openid’] = $info->get_openid($code);//调取QQ openid值
 26
 27 if(!emptyempty($_SESSION[‘openid’])){
 28
 29 $r = $this->db->get_one(array(‘connectid’=>$_SESSION[‘openid’],’from’=>’qq’));
 30
 31 if(!emptyempty($r)){
 32
 33 //QQ已存在于数据库,则直接转向登陆操作
 34
 35 $password = $r[‘password’];
 36
 37 $this->_init_phpsso();
 38
 39 $synloginstr = $this->client->ps_member_synlogin($r[‘phpssouid’]);
 40
 41 $userid = $r[‘userid’];
 42
 43 $groupid = $r[‘groupid’];
 44
 45 $username = $r[‘username’];
 46
 47 $nickname = emptyempty($r[‘nickname’]) ? $username : $r[‘nickname’];
 48
 49 $this->db->update(array(‘lastip’=>ip(), ‘lastdate’=>SYS_TIME, ‘nickname’=>$me[‘name’]),array(‘userid’=>$userid));
 50
 51 if(!$cookietime) $get_cookietime = param::get_cookie(‘cookietime’);
 52
 53 $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);
 54
 55 $cookietime = $_cookietime ? TIME + $_cookietime : 0;
 56
 57 $phpcms_auth_key = md5(pc_base::load_config(‘system’, ‘auth_key’).$this->http_user_agent);
 58
 59 $phpcms_auth = sys_auth($userid.”\t”.$password, ‘ENCODE’, $phpcms_auth_key);
 60
 61  param::set_cookie(‘auth’, $phpcms_auth, $cookietime);
 62
 63  param::set_cookie(‘_userid’, $userid, $cookietime);
 64
 65  param::set_cookie(‘_username’, $username, $cookietime);
 66
 67  param::set_cookie(‘_groupid’, $groupid, $cookietime);
 68
 69  param::set_cookie(‘cookietime’, $_cookietime, $cookietime);
 70
 71  param::set_cookie(‘_nickname’, $nickname, $cookietime);
 72
 73 $forward = isset($_GET[‘forward’]) && !emptyempty($_GET[‘forward’]) ? $_GET[‘forward’] : ‘index.php?m=member&c=index‘;
 74
 75  showmessage(L(‘login_success’).$synloginstr, $forward);
 76
 77  }else{
 78
 79 //未存在于数据库中,跳去完善资料页面。页面预置用户名(QQ返回是UTF8编码,如有需要进行转码)
 80
 81 $user = $info->get_user_info();
 82
 83 $_SESSION[‘connectid’] = $_SESSION[‘openid’];
 84
 85 $_SESSION[‘from’] = ‘qq‘;
 86
 87 if(CHARSET != ‘utf-8′) {//转编码
 88
 89 $connect_username = iconv(‘utf-8′, CHARSET, $user[‘nickname’]);
 90
 91 }
 92
 93 include template(‘member’, ‘connect’);
 94
 95  }
 96
 97  }
 98
 99  }
100
101  }  

②把附件的qqOAuth2.class.php文件放在 \phpcms\modules\member\classes\ 文件夹里。

③在后台找到connect设置,把QQ号码登陆的回调地址改成http://php100.com/index.php?m=member&c=index&a=public_qq_login2 (把我的域名换成你自己的)

④填好App ID和App key,然后更新缓存。

⑤登陆phpmyadmin,找到v9_member这张表的connectid字段(或者自定义的字段),把类型改成“char(255)”,因为phpcms默认是15位的。所以我们直接彻底修改成255位,这个不管是腾讯的其它第三方网站帐号(例如淘宝、支付宝、百度、360等其它第三方帐号),都可以完成数据绑定

时间: 2024-10-12 02:38:10

phpcms V9实现QQ登陆OAuth2.0的相关文章

QQ互联OAuth2.0 .NET SDK 发布以及网站QQ登陆示例代码

OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容. QQ登录OAuth2.0:对于用户相关的OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等),为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权. QQ登录OAuth2.0采用OAuth2.0标准协议来进行用户身份验证和获取用户授权,相对于之前的OAuth1.0协议,其认证流程

QQ互联Oauth2.0认证测试

我不太喜欢讲原理,喜欢按照应用流程一步步完成一个测试项目,然后掉过头来看原理. 如此. 首先,我们得建一个应用,这无可厚非. 来个网站应用吧! 填写基本信息时,有个网站地址,我们填写一个自己所维护的外部网站页面地址. 在HEAD标签里按照提示,嵌入验证代码,并加以验证. 回调地址填写相应的域名. 示例: 在新建的web项目里新加一个配置文件如下: app_ID = ******** app_KEY = ************************* redirect_URI = http:/

什么是“QQ登录OAuth2.0”

1. 什么是“QQ登录OAuth2.0 OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容. QQ登录OAuth2.0:对于用户相关的OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等),为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权.QQ登录OAuth2.0采用OAuth2.0标准协议来进行用户身份验证和获取用户授权,相对于

phpcms v9屏蔽后台登陆验证码的方法

打开\phpcms\modules\admin\index.php 替换前 $code = isset($_POST['code']) && trim($_POST['code']) ? trim($_POST['code']) : showmessage(L('input_code'), HTTP_REFERER);if ($_SESSION['code'] != strtolower($code)) {showmessage(L('code_error'), HTTP_REFERER)

用于新浪微博,腾讯QQ,淘宝 OAuth2.0 登陆的NET类库封装

目前开放OAuth2互联接口比较常用的有新浪微博,腾讯QQ,淘宝,其实还有微信,只是微信的我木有申请下来,因为手续麻烦,貌似需要扫描它的协议签字然后发过去,所以就放弃封装微信OAuth2登陆接口了,待以后给补上!关于淘宝OAuth网站接入登陆目前淘宝是暂停审核了貌似,也许是因为财大气粗比较任性吧,不过你还是可申请账号的,可以做应用提交给淘宝. 需要源代码的小伙伴请猛戳这里下载,需要已经编译好Dll的小伙伴请猛戳这里下载. 一. 下面给出各个OAuth2.0申请合作的地址: -- sinaweib

QQ登录整合/oauth2.0认证-02-跳转到QQ互联页

---------------------------目录---------------------------------- QQ登录整合/oauth2.0认证-01-申请appkey和appid ---------------------------正文---------------------------------- 在上一讲里面,主要是 要读者们 先准备一个 appid 和appkey,准备这个 可能需要一段时间审核,公司类型的可能稍微慢一点 其实 关键是 你能有一个可以绑定上域名的空

第三方登录:QQ登录实现(OAuth2.0)

一.创建应用 1.在 QQ互联 创建应用 地址:https://connect.qq.com/manage.html#/ 然后进行实名认证,创建应用,审核通过 然后点击查看,可以获得 APP ID 和 APP Key 回调地址如下 2.授权的基本原理 可以参考官方文档 1)根据QQ登录链接可以回调获得 code 2)根据APP ID .APP Key 和 code 可获得 token 3)根据 token 获得 OpenId 4)  根据 OpenId 可以获得用户的基本信息 其中 OpenId

基于OAuth2.0协议的QQ第三方授权登录iOS代码分析

简要说明: 授权登录已经成为注册方式里的主流,目前授权登录方式主要SSO跳转授权登录和OAuth2.0两种,前者好处无需用户再次输入密码就可以直接授权成功,但前提是必须用户手机端安装了该软件,比如QQ,后者的优势就是是否安装无关紧要,是一个HTML的页面呈现,麻烦就在于要输入用户名和密码,这就非常不爽了,但是有时候偏偏必须这么做,理由嘛,自行想想就好,接下来我们就看看如果利用OAuth2.0的方式来做QQ授权登录,如果想了解QQ的SSO授权登录,可以看我(博客主页)之前的博客:基于第三方QQ授权

第三方登录之QQ登录(二)——OAuth2.0处理流程介绍(以QQ登录为例)

为了让网站更快接入,腾讯提供了JS SDK的接入方案,具体点击这里或者点击这里进行查看. 不过也可以自己写代码,当然你需要了解QQ的OAuth2.0的处理流程(Web Server Flow). OAuth2.0的处理流程:点击这里查看官方Wiki. 1.授权:获取授权码Authorization Code 说明:第一步QQ必须得到要登录系统的授权信息,如果授权全成功,则会跳转到回调地址,同时授权码以参数形式,追加回调地址上. 当然还有一些其他参数,具体详情看官方介绍. 实例: https://