我们社区在 yii2-authclient 多次升级后,登录异常。一直想寻求一种通用的方法,尽量不重写 OAuth2BaseOAuth 以及 OAuthToken 类, 所以本次直接在 initUserAttributes 方法返回结果的地方去修改,这样会受 yii2-authclient 升级影响较小,我把 QQClient.php 和 WeiboClient.php 放在 frontend/widgets 下了,接下来我们来看代码!

QQClient.php

您的邮箱 2594396825@qq.com 还未验证,请尽快登录邮箱查收邮件并激活。如果您未收到邮件,点此重新发送。 ×
首页
源码
Yii2 使用 QQ 和 Weibo 第三方登录源码
Yii2 使用 QQ 和 Weibo 第三方登录源码 [ 2.0 版本 ]╃巡洋艦㊣2016-09-03 18:17:3311219次浏览24条评论8824 0
我们社区在 yii2-authclient 多次升级后,登录异常。一直想寻求一种通用的方法,尽量不重写 OAuth2, BaseOAuth 以及 OAuthToken 类, 所以本次直接在 initUserAttributes 方法返回结果的地方去修改,这样会受 yii2-authclient 升级影响较小,我把 QQClient.php 和 WeiboClient.php 放在 frontend/widgets 下了,接下来我们来看代码!QQClient.php
<?phpnamespace frontend\widgets;use yii\authclient\OAuth2;
use yii\web\HttpException;
use Yii;class QQClient extends OAuth2
{public $authUrl = 'https://graph.qq.com/oauth2.0/authorize';public $tokenUrl = 'https://graph.qq.com/oauth2.0/token';public $apiBaseUrl = 'https://graph.qq.com';protected function initUserAttributes(){$user = $this->api('user/get_user_info', 'GET', ['oauth_consumer_key' => $this->user->client_id, 'openid' => $this->user->openid]);return ['client' => 'qq','openid' => $this->user->openid,'nickname' => $user['nickname'],'gender' => $user['gender'],'location' => $user['province'] . $user['city'],];}/*** @inheritdoc*/protected function getUser(){$str = file_get_contents('https://graph.qq.com/oauth2.0/me?access_token=' . $this->accessToken->token);if (strpos($str, "callback") !== false) {$lpos = strpos($str, "(");$rpos = strrpos($str, ")");$str = substr($str, $lpos + 1, $rpos - $lpos -1);}return json_decode($str);}/*** @inheritdoc*/protected function defaultName(){return 'QQ';}/*** @inheritdoc*/protected function defaultTitle(){return 'QQ 登录';}
}

  

WeiboClient.php

<?phpnamespace frontend\widgets;use yii\authclient\OAuth2;
use yii\web\HttpException;
use Yii;class WeiboClient extends OAuth2
{public $authUrl = 'https://api.weibo.com/oauth2/authorize';public $tokenUrl = 'https://api.weibo.com/oauth2/access_token';public $apiBaseUrl = 'https://api.weibo.com/2';protected function initUserAttributes(){$user = $this->api('users/show.json', 'GET', ['uid' => $this->user->uid]);return ['client' => 'weibo','openid' => $user['id'],'nickname' => $user['name'],'gender' => $user['gender'],'location' => $user['location'],];}/*** @inheritdoc*/protected function getUser(){$str = file_get_contents('https://api.weibo.com/2/account/get_uid.json?access_token=' . $this->accessToken->token);return json_decode($str);}/*** @inheritdoc*/protected function defaultName(){return 'Weibo';}/*** @inheritdoc*/protected function defaultTitle(){return '微博登录';}
}

  

转载于:https://www.cnblogs.com/echojson/p/10766010.html

Yii2 使用 QQ 和 Weibo 第三方登录源码相关推荐

  1. 拾人牙慧篇之———QQ微信的第三方登录实现

    一.写在前面 关于qq微信登录的原理之流我就不一一赘述了,对应的官网都有,在这里主要是展示我是怎么实现出来的,看了好几个博客,有的是直接复制官网的,有的不知道为什么实现不了.我只能保证我的这个是我实现 ...

  2. qq音乐登录页面的html代码,musicQQ音乐协议登录源码

    [实例简介] 最近闲来无事,把一些自己的箱底代码拿出分享.... musicQQ音乐协议登录源码 纯C#代码.协议分析及代码完全由本人完成.欢迎测试. musicQQ协议 登录 源码 c# QQ音乐协 ...

  3. java 微信 qq 登录_拾人牙慧篇之———QQ微信的第三方登录实现

    一.写在前面 关于qq微信登录的原理之流我就不一一赘述了,对应的官网都有,在这里主要是展示我是怎么实现出来的,看了好几个博客,有的是直接复制官网的,有的不知道为什么实现不了.我只能保证我的这个是我实现 ...

  4. Thinkphp 微信公众号开发3-微信登录源码

    Thinkphp 微信公众号开发3-微信登录源码 微信官方的开发文档 微信官方开发文档传送门 官方提供的方式 那我们要做的流程如下 虽然官方写了一堆文字看的一脸懵 但是我们只需要清楚流程就可以了 获取 ...

  5. thinkPHP仿QQ飞车手游模拟抽奖源码

    介绍: thinkPHP仿QQ飞车手游模拟抽奖源码,用途很简单,就是看看你投入多少钱能抽到. 使用方法: 下载源码,上传解压到你的服务器或者主机里面. 由于本程序是thinkPHP开发的,所以需要配置 ...

  6. android studio开发十一 Library第三方类库源码, Jar包和SO库

    原创: 发现android里面不熟悉的东西太多了,查了好多资料,终于搞清楚 Library第三方类库源码, Jar包和SO库这些都是干什么的了,怎么使用它们了. [Library第三方类库源码] Ja ...

  7. 基于Java毕业设计新冠疫苗接种预约系统登录源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计新冠疫苗接种预约系统登录源码+系统+mysql+lw文档+部署软件 基于Java毕业设计新冠疫苗接种预约系统登录源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构 ...

  8. 计算机毕业设计Java新冠疫苗接种预约系统登录(源码+系统+mysql数据库+Lw文档)

    计算机毕业设计Java新冠疫苗接种预约系统登录(源码+系统+mysql数据库+Lw文档) 计算机毕业设计Java新冠疫苗接种预约系统登录(源码+系统+mysql数据库+Lw文档) 源码下载地址:htt ...

  9. 用其他账号登录插件 齐博 php,WordPress禁止某些用户账号登录源码插件“盘他”下载...

    发现某些人总有些坏习惯,来评论找资源,回复的时候乱打一气,一连串乱七八糟的字.今天,缙哥哥决定将这些没用的评论通通删除,并将其账号拉入黑名单!说白了,就是我看着不爽. 像这种垃圾评论,占用空间,毫无意 ...

最新文章

  1. 中国行政区划信息JS库china-location
  2. PCE:南农沈其荣团队根系分泌物驱动土壤-微生物-养分之间的反馈作用以响应植物的生长...
  3. android onTouch()与onTouchEvent()的区别
  4. Golang加密md5
  5. PHP通过PDO连接Microsoft Access数据库
  6. hdu 3371 Connect the Cities(prim算法)
  7. 宇宙大爆炸是不是一个黑洞的大爆炸?
  8. cisco和H3C命令对比
  9. java after 函数_函数周期表丨信息丨值丨ISONORAFTER
  10. 饿了么微信小程序抓取
  11. 首字母筛选 java_【Java习作】提取汉字拼音首字母(Java版)
  12. android 面包屑控件,android面包屑導航欄的實現
  13. 百度网盘非会员上传大于4G的文件
  14. 机器学习开源框架系列:Torch:1:简介与安装
  15. Perfmon - Windows 自带系统监控工具
  16. 橘子学ES19之词项搜索全文检索
  17. java计算机毕业设计科院垃圾分类系统源码+数据库+系统+lw文档+mybatis+运行部署
  18. 合肥最最最牛逼的 IT 公司全在这了
  19. win10笔记本电源的高性能找不到
  20. 先进先出的两个简单例子

热门文章

  1. 文本查找查找命令的grep 、egrep、fgrep用法的详解
  2. KVC、KVO、通知
  3. postgis学习笔记
  4. mysql让数据库的数据按照id来排序方法
  5. 基于Virtex-6 FPGA的三种串行通信协议测试及对比
  6. 数字信号处理中卷积的图形化动态解释
  7. FPGA管脚分配文件的保存
  8. C++实现判断两个单词是否为变位词
  9. 交互式python shell
  10. spring各版本jar包和源码