搜索
首页后端开发php教程Yii2实现QQ互联登录
Yii2实现QQ互联登录Dec 29, 2017 pm 06:54 PM
yii2实现登录

本文主要介绍了Yii2中OAuth扩展及QQ互联登录的方法,实例分析了OAuth扩展的相关配置与QQ互联登陆的实现技巧。需要的朋友可以参考下,希望对大家有所帮助。

具体如下:

php composer.phar require --prefer-dist yiisoft/yii2-authclient "*"

Quick start 快速开始

更改Yii2的配置文件config/main.php,在components中增加如下内容

'components' => [
 'authClientCollection' => [
 'class' => 'yii\authclient\Collection',
 'clients' => [
  'google' => [
  'class' => 'yii\authclient\clients\GoogleOpenId'
  ],
  'facebook' => [
  'class' => 'yii\authclient\clients\Facebook',
  'clientId' => 'facebook_client_id',
  'clientSecret' => 'facebook_client_secret',
  ],
 ],
 ]
 ...
]

更改入口文件,一般是app/controllers/SiteController.php,在function actions增加代码,同时增加回调函数successCallback,大致如下

class SiteController extends Controller
{
 public function actions()
 {
 return [
  'auth' => [
  'class' => 'yii\authclient\AuthAction',
  'successCallback' => [$this, 'successCallback'],
  ],
 ]
 }
 public function successCallback($client)
 {
 $attributes = $client->getUserAttributes();
 // user login or signup comes here
 }
}

在登录的Views中,增加如下代码


<?= yii\authclient\widgets\AuthChoice::widget([
 &#39;baseAuthUrl&#39; => [&#39;site/auth&#39;]
])?>

以上是官方的说明文档,下面我们来接入QQ互联

增加QQ登录的组件 我这里是放在 common/components/QqOAuth.php 中,源代码如下

<?php
namespace common\components;
use yii\authclient\OAuth2;
use yii\base\Exception;
use yii\helpers\Json;
/**
 *
 * ~~~
 * &#39;components&#39; => [
 * &#39;authClientCollection&#39; => [
 *  &#39;class&#39; => &#39;yii\authclient\Collection&#39;,
 *  &#39;clients&#39; => [
 *  &#39;qq&#39; => [
 *   &#39;class&#39; => &#39;common\components\QqOAuth&#39;,
 *   &#39;clientId&#39; => &#39;qq_client_id&#39;,
 *   &#39;clientSecret&#39; => &#39;qq_client_secret&#39;,
 *  ],
 *  ],
 * ]
 * ...
 * ]
 * ~~~
 *
 * @see http://connect.qq.com/
 *
 * @author easypao <admin@easypao.com>
 * @since 2.0
 */
class QqOAuth extends OAuth2
{
 public $authUrl = &#39;https://graph.qq.com/oauth2.0/authorize&#39;;
 public $tokenUrl = &#39;https://graph.qq.com/oauth2.0/token&#39;;
 public $apiBaseUrl = &#39;https://graph.qq.com&#39;;
 public function init()
 {
 parent::init();
 if ($this->scope === null) {
  $this->scope = implode(&#39;,&#39;, [
  &#39;get_user_info&#39;,
  ]);
 }
 }
 protected function initUserAttributes()
 {
 $openid = $this->api(&#39;oauth2.0/me&#39;, &#39;GET&#39;);
 $qquser = $this->api("user/get_user_info", &#39;GET&#39;, [&#39;oauth_consumer_key&#39;=>$openid[&#39;client_id&#39;], &#39;openid&#39;=>$openid[&#39;openid&#39;]]);
 $qquser[&#39;openid&#39;]=$openid[&#39;openid&#39;];
 return $qquser;
 }
 protected function defaultName()
 {
 return &#39;qq&#39;;
 }
 protected function defaultTitle()
 {
 return &#39;Qq&#39;;
 }
 /**
 * 该扩展初始的处理方法似乎QQ互联不能用,应此改写了方法
 * @see \yii\authclient\BaseOAuth::processResponse()
 */
 protected function processResponse($rawResponse, $contentType = self::CONTENT_TYPE_AUTO)
 {
   if (empty($rawResponse)) {
     return [];
   }
   switch ($contentType) {
     case self::CONTENT_TYPE_AUTO: {
       $contentType = $this->determineContentTypeByRaw($rawResponse);
       if ($contentType == self::CONTENT_TYPE_AUTO) {
   //以下代码是特别针对QQ互联登录的,也是与原方法不一样的地方 
         if(strpos($rawResponse, "callback") !== false){
           $lpos = strpos($rawResponse, "(");
           $rpos = strrpos($rawResponse, ")");
           $rawResponse = substr($rawResponse, $lpos + 1, $rpos - $lpos -1);
           $response = $this->processResponse($rawResponse, self::CONTENT_TYPE_JSON);
           break;
         }
   //代码添加结束
         throw new Exception(&#39;Unable to determine response content type automatically.&#39;);
       }
       $response = $this->processResponse($rawResponse, $contentType);
       break;
     }
     case self::CONTENT_TYPE_JSON: {
       $response = Json::decode($rawResponse, true);
       if (isset($response[&#39;error&#39;])) {
         throw new Exception(&#39;Response error: &#39; . $response[&#39;error&#39;]);
       }
       break;
     }
     case self::CONTENT_TYPE_URLENCODED: {
       $response = [];
       parse_str($rawResponse, $response);
       break;
     }
     case self::CONTENT_TYPE_XML: {
       $response = $this->convertXmlToArray($rawResponse);
       break;
     }
     default: {
       throw new Exception(&#39;Unknown response type "&#39; . $contentType . &#39;".&#39;);
     }
   }
   return $response;
 }
}

更改 config/main.php 文件,在components中增加,大致如下

&#39;components&#39; => [
 &#39;authClientCollection&#39; => [
   &#39;class&#39; => &#39;yii\authclient\Collection&#39;,
   &#39;clients&#39; => [
     &#39;qq&#39; => [
      &#39;class&#39;=>&#39;common\components\QqOAuth&#39;,
      &#39;clientId&#39;=>&#39;your_qq_clientid&#39;,
      &#39;clientSecret&#39;=>&#39;your_qq_secret&#39;
    ],
   ],
 ]
]

SiteController.php 就按官方那样子

public function successCallback($client)
{
 $attributes = $client->getUserAttributes();
 // 用户的信息在$attributes中,以下是您根据您的实际情况增加的代码
 // 如果您同时有QQ互联登录,新浪微博等,可以通过 $client->id 来区别。
}

最后在登录的视图文件中 增加QQ登录链接

<a href="/site/auth?authclient=qq">使用QQ快速登录</a>

相关推荐:

php接入QQ登录OAuth2.0 过程中遇到的坑分享

oAuth 认证与授权

Yii2中关于组件的注册以及创建的方法详解

以上是Yii2实现QQ互联登录的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
《阴阳师》茨木童子典藏皮肤登录即领,禅心云外镜新皮肤即将上线!《阴阳师》茨木童子典藏皮肤登录即领,禅心云外镜新皮肤即将上线!Jan 05, 2024 am 10:42 AM

山野间万鬼嘶鸣,隐没兵刃交接之声,越岭奔赴而来的鬼将,心中战意汹涌,以炎火为号,率百鬼冲锋迎战。【炽焱百炼•茨木童子典藏皮肤上线】鬼角炽焰怒燃,鎏金眼眸迸发桀骜战意,白玉甲片装点战袍,彰显大妖不羁狂放的气势。雪白飘扬的袖摆上,赤焰攀附交织,金纹烙印其中,燃点一片绯艳妖异色彩。妖力凝聚而成的鬼火咆哮而至,烈焰令群峦为之震动,炼狱间归来的妖鬼啊,一同惩戒进犯之人吧。【专属动态头像框•炽焱百炼】【专属插画•焰火将魂】【传记鉴赏】【获取方式】茨木童子典藏皮肤·炽焱百炼将于12月28日维护后上架皮肤商店,

如何在 Windows PC 上修复 Steam 登录错误 E84如何在 Windows PC 上修复 Steam 登录错误 E84Jun 28, 2023 am 08:20 AM

Steam登录错误E84是Steam用户在多次登录尝试中遇到的常见登录。如果您无法登录Steam,则无法执行任何有用的操作。如果您不先处理此E84登录错误,您将面临大量问题。初步解决方法–1.如果您是第一次在Steam中遇到此E84错误,重新启动系统可能会修复它。关闭Steam应用程序。将其从系统托盘中退出。然后,重新启动系统并重试整个过程。2.检查互联网连接是否有故障。如果您的互联网连接速度较慢,Steam登录可能会引发E84。修复1–将noreactlogin添加到Steam可执行文件您必须

1.1.1.1上网认证系统怎么登录1.1.1.1上网认证系统怎么登录Apr 20, 2023 am 10:44 AM

1.1.1.1上网认证系统登录方法:1、搜索校园网无线信号并连接;2、打开浏览器,在弹出的身份验证界面选择“自助服务”;3、输入用户名和初始密码进行登录;4、完善个人信息并设置为强密码即可。

如何在 Windows 11/10 上安装 GitHub Copilot如何在 Windows 11/10 上安装 GitHub CopilotOct 21, 2023 pm 11:13 PM

GitHubCopilot是编码人员的下一个级别,它基于AI的模型可以成功预测和自动完成您的代码。但是,您可能想知道如何在您的设备上加入这个AI天才,以便您的编码变得更加容易!但是,使用GitHub并不是很容易,初始设置过程是一个棘手的过程。因此,我们创建了这个分步教程,介绍如何在Windows11、10上的VSCode中安装和实现GitHubCopilot。如何在Windows上安装GitHubCopilot此过程有几个步骤。因此,请立即执行以下步骤。步骤1–您必须在计算机上安装最新版本的可视

教您win7登陆了怎么查看电脑密码教您win7登陆了怎么查看电脑密码Jul 11, 2023 pm 08:41 PM

在我们使用win7操作系统的过程中,我们通常会给电脑设置一个密码。最近就有小伙伴想要了解win7登陆了怎么查看电脑密码,其实win7查看电脑密码的方法非常简单。今天小编就来告诉大家win7查看电脑密码怎么操作。下面就让我们一起来看看吧!win7查看电脑密码的方法:1、按下win键+r键,输入rundll32netplwiz.dll,UsersRunDll,然后点击确定。2、取消勾选“要使用本机,用户必须输入用户名和密码”3、取消后点击确定,在弹出的对话框中不要输入你想让电脑每次自动登录的账户和密

尝试这个简单的 3 步解决方案,解决无法登录Microsoft帐户的问题尝试这个简单的 3 步解决方案,解决无法登录Microsoft帐户的问题Sep 07, 2023 am 10:09 AM

您无法登录Microsoft帐户的原因有多种。虽然它很少发生,但当它发生时,它可能会令人沮丧。例如,在Windows11中,发生这种情况的原因之一是由于MicrosoftStore内置应用程序有时会损坏并停止正常工作。例如,这位Reddit用户遇到了这个问题,其他用户通过一个简单的解决方案来拯救,该解决方案似乎最终奏效了。为了能够重新登录Microsoft帐户,需要重新安装所有内置的Microsoft应用商店应用。事情是这样的。以管理员身份打开Powershell应用。输入以下命令:Get-Ap

如何通过JavaScript实现免登录功能如何通过JavaScript实现免登录功能Jun 15, 2023 pm 10:43 PM

在许多网络应用程序中,登录是一项必须的操作。然而,在一些情况下,尤其是在一些无需提供极高安全性的应用程序中,我们可以实现免登录功能,减轻用户登录的时间和操作次数。下面我们将介绍如何通过Javascript实现免登录功能。步骤一:使用cookie存储登录状态Cookies是一种为Web提供的数据存储方式,它可以将数据存储在用户本地计算机中。通过设置cookie

为什么电脑版微信登录不了为什么电脑版微信登录不了Aug 18, 2023 pm 02:07 PM

电脑版微信登录不了是由于网络连接问题、账号密码输入错误、微信服务器故障、操作系统或应用程序问题以及账号被封禁或异常登录等原因所导致。详细介绍:1、网络连接问题,尝试重新连接网络或者更换网络环境;2、账号密码输入错误,尝试使用手机版微信登录来确认账号和密码是否正确;3、微信服务器故障,尝试等待一段时间后再次尝试登录;4、操作系统或应用程序问题,尝试更新操作系统或者微信应用程序等。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)