我们社区在 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:33
11219次浏览
24条评论
88
24 0
我们社区在 yii2-authclient 多次升级后,登录异常。一直想寻求一种通用的方法,尽量不重写 OAuth2, BaseOAuth 以及 OAuthToken 类, 所以本次直接在 initUserAttributes 方法返回结果的地方去修改,这样会受 yii2-authclient 升级影响较小,我把 QQClient.php 和 WeiboClient.php 放在 frontend/widgets 下了,接下来我们来看代码! QQClient.php
<?php namespace 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

<?php

namespace 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 '微博登录';
}
}

  

Yii2 使用 QQ 和 Weibo 第三方登录源码的更多相关文章

  1. 使用OAuth2.0协议的github、QQ、weibo第三方登录接入总结

    目录 第三方接入总结 OAuth2.0介绍 github OAuth2.0登录接入 国内第三方应用商SDK使用 微博SDK 腾讯QQ SDK passport.js插件使用 安装 相关中间件.路由 返 ...

  2. CAS Server集成QQ登录、新浪微博登录源码及配置文件

    转载自素文宅博客:https://blog.yoodb.com/yoodb/article/detail/1446 CAS Server集成QQ第三方登录,CAS Server集成新浪微博第三方登录以 ...

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

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

  4. Saiku登录源码追踪.(十三)

    Saiku登录源码追踪呀~ >>首先我们需要debug跟踪saiku登录执行的源码信息 saiku源码的debug方式上一篇博客已有说明,这里简单介绍一下 在saiku启动脚本中添加如下命 ...

  5. Android studio导入第三方类库源码以及jar包

    新建一个Android项目,项目结构如下: 1.添加第三方类库源码 首先将第三方类库考入与app同级的目录下: 之后,在build.gradle(Moudule:app)下添加编译代码:在seting ...

  6. CI框架 QQ接口(第三方登录接口PHP版)

    本帖内容较多,大部分都是源码,要修改的地方只有一个,其他只要复制过去,就可以完美运行.本帖主要针对CI框架,不用下载SDK,按我下面的步骤,建文件,复制代码就可以了.10分钟不要,接口就可完成.第一步 ...

  7. 类似818tu.co微信小说分销系统设计之多公众号网页授权自动登录源码

    /** 转载请保留原地址以及版权声明,请勿恶意修改 *  作者:杨浩瑞  QQ:1420213383  独立博客:http://www.yxxrui.cn * [后台]http://xiaoshuo. ...

  8. 类似818tu.c微信小说分销系统设计之多公众号网页授权自动登录源码分享

    /** 转载请保留原地址以及版权声明,请勿恶意修改 *  作者:杨浩瑞  QQ:1420213383  独立博客:http://www.yxxrui.cn * [后台]http://xiaoshuo. ...

  9. 迅影QQ视频查看v2.0 源码

    骗了1200多位朋友,实在惭愧,现在公开我自己的源码实现.本人新人,代码很烂,请凑合看吧O(∩_∩)O~ Form1.cs using System; using System.Text.Regula ...

随机推荐

  1. Oracle数据库 Synonym和DBLink

    1.1数据库创建同义词(synonym) Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系.它可以节省大量的数据库空间,对不同用户的操作同一张表没 ...

  2. Linux磁盘故障案例

    原因:由于另外一块磁盘不存在,但是配置文件/etc/fstab中又有挂载的配置,挂载出问题就导致这样的故障. 输入root密码进去 编辑/etc/fstab文件把箭头指向的这一行注释掉或者删除掉.然后 ...

  3. 策略模式(Strategy Model)

    定义:一个类的行为或算法能在运行时被改变,将一组算法封装成一系列对象,通过这些对象灵活改变系统功能: 实现方式: 首先定义个strategy接口,然后创建一系列对象(strategy objects) ...

  4. 基于java代码的springmvc配置

    在我的印象中,开发一个web项目首选当然是springmvc,而配置springmvc无非就是web.xml里配置其核心控制器DispatcherServlet.然后把所有的请求都交给它处理,再配个视 ...

  5. 20165214 2018-2019-2 《网络对抗技术》Exp5 MSF基础应用 Week8

    <网络对抗技术>Exp5 MSF基础应用 Week8 一.实验目标与内容 1.实践内容(3.5分) 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体我 ...

  6. 最常用的JavaScript类的定义

    混合的构造函数/原型方式 联合使用构造函数和原型方式,就可像用其他程序设计语言一样创建对象.这种概念非常简单,即用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法).结果是,所有函 ...

  7. java 反射简说

    1 Class类 就是类的类型.研究反射先了解下Class类. 获取类的类型的三种方法: Class c1 = 对象.getClass(); Class c2 = Class.forName(&quo ...

  8. less &进行选择判断css的样式

    先说&在less写 .parent{ .child{} &.and{} }在css就是 .parent.child{}//父子关系 .parent.and{}//并关系 用到这个方法是 ...

  9. (转)解决NSMutableAttributedString富文本,不同文字大小水平轴对齐问题(默认底部对齐)

    默认是底部对齐,其实对的也不齐, 目标效果:  代码: NSBaselineOffsetAttributeName 基线偏移量: 调整: NSBaselineOffsetAttributeName的值 ...

  10. ASP.NET MVC学习中记录下使用JavaScript和CSS层叠样式表的经历

    首先我是想要在ASP.NET MVC 5.0中使用从jQuery之家下载下来的插件. 在下载了许多我觉得好用方便的插件之后,我在VS2017中新建了一个项目叫MVCTest,然后选择MVC模板,等待自 ...