我们社区在 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. 非关系数据库一Memcached

    第三十四课 非关系数据库一Memcached 目录 一.nosql介绍 二.memrcached介绍 三.安装memcached 四.查看memcachedq状态 五.memcached命令行 六.m ...

  2. Vue语法学习第一课——插值

    学习关于Vue的插值语法 ① 文本值 : "Mustache"语法,即双大括号 <span>Message:{{msg}}</span> 注:双大括号中的m ...

  3. 细数本地连阿里云上mysql8遇到的坑

    最近两个月忙成狗,给了自己一个冠冕堂皇的不记录博客的借口,今天咬牙记录一篇本地连阿里云mysql遇到的各种坑; 昨天利用妹妹的学生身份买了台廉价的阿里ECS,购买成功后的第一反应当然是把本地的mysq ...

  4. this与super

    this是引用,表示当前对象,堆中每一个对象都有this,保存的地址指向自身:super不是引用,是表示当前对象的父类特征. this可以使用在构造方法中,即this(..),必须出现在代码第一行,代 ...

  5. TCP学习总结(四)

    TCP连接管理 TCP运输连接有3个阶段, 即: 连接建立,数据传送和连接释放. 1. TCP的连接建立(3次握手) TCP连接的建立采用客户服务器方式.主动发起连接建立的应用进程叫做客户(clien ...

  6. 搞Java

    上班之余,开始研究Java了. 想想从三月份开始自己啃书以来,Spring+Mybatis+公司框架的用法,基本都是速成来的,还是有些恐惧的. Spring万般爽,annotion用的很舒服,但还是想 ...

  7. crontab定时执行shell脚本失败的原因

    有一段时间不用crontab定时执行任务了,这次趁着项目实施的机会来进一步分析一下crontab定时任务设置时遇到的一些棘手的问题. crontab -l 查看目前已经设置的crontab信息 cro ...

  8. 2018-No.7-SicnuCtf

    5月份的比赛现在才有时间在博客贴出来,这是我第二次出题了,第一次是上届的初赛,这次是决赛的题. 签到(base_or_base) 解压得到两个文件小明.zip和......txt,根据文件名提示猜测是 ...

  9. 2018-软工机试-D-定西

    单点时限: 1.0 sec 内存限制: 256 MB 这么多年你一个人一直在走 方向和天气的节奏会让你忧愁 你说你遇见了一大堆奇怪的人 他们看上去好像都比你开心 ——李志<定西> 这首歌的 ...

  10. 使用axios获取本地json数据

    1. 通过搜索 网上说不放在static文件夹中会报错  但是一直报错  放到根目录下的时候不报错了 2. 在main.js中引入axios import axios from 'axios' 3. ...