찾다
백엔드 개발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 "*"

빠른 시작 빠른 시작

Yii2 구성 파일 config/main.php를 변경하고 구성 요소에 다음 콘텐츠를 추가하세요.

'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) , 함수 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
 }
}

로그인 뷰에 다음 코드를 추가하세요


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

위는 공식 문서입니다. QQ 인터넷에 접속해 보겠습니다.

QQ 로그인 추가 컴포넌트는 common/comComponents/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 파일을 변경하고 대략 다음과 같이 컴포넌트에 추가합니다

&#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>

관련 권장 사항:

QQ 로그인에 대한 PHP 액세스 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、完善个人信息并设置为强密码即可。

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

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

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

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

如何在 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–您必须在计算机上安装最新版本的可视

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

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

uniapp应用如何实现登录和注册功能uniapp应用如何实现登录和注册功能Oct 21, 2023 am 10:07 AM

Uniapp是一款跨平台的开发框架,可以用于开发多个平台(如微信小程序、H5、App等)的应用程序。在开发过程中,登录和注册功能是很常见的需求。本文将介绍如何使用Uniapp实现登录和注册功能,并提供具体的代码示例。登录功能实现在Uniapp中实现登录功能,通常需要以下几个步骤:1.1创建登录界面在pages文件夹下创建Login页面,在Login.vue

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구