Yii 2 에서 OAuth 확장 및 QQ 상호 접속 로그 인 실현 방법
6958 단어 Yii2OAuth 확장QQ 상호 접속 로그 인
php composer.phar require --prefer-dist yiisoft/yii2-authclient "*"
빠 른 시작 빠 른 시작Yii 2 의 프로필 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
}
}
로그 인 한 뷰 에 다음 코드 를 추가 합 니 다.
<?= yii\authclient\widgets\AuthChoice::widget([
'baseAuthUrl' => ['site/auth']
])?>
이상 은 공식 설명 문서 입 니 다.다음은 QQ 연결 에 접속 하 겠 습 니 다.QQ 로그 인 구성 요 소 를 추가 합 니 다.common/coponents/QqOAuth.php 에 원본 코드 는 다음 과 같 습 니 다.
<?php
namespace common\components;
use yii\authclient\OAuth2;
use yii\base\Exception;
use yii\helpers\Json;
/**
*
* ~~~
* 'components' => [
* 'authClientCollection' => [
* 'class' => 'yii\authclient\Collection',
* 'clients' => [
* 'qq' => [
* 'class' => 'common\components\QqOAuth',
* 'clientId' => 'qq_client_id',
* 'clientSecret' => 'qq_client_secret',
* ],
* ],
* ]
* ...
* ]
* ~~~
*
* @see http://connect.qq.com/
*
* @author easypao <[email protected]>
* @since 2.0
*/
class QqOAuth 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';
public function init()
{
parent::init();
if ($this->scope === null) {
$this->scope = implode(',', [
'get_user_info',
]);
}
}
protected function initUserAttributes()
{
$openid = $this->api('oauth2.0/me', 'GET');
$qquser = $this->api("user/get_user_info", 'GET', ['oauth_consumer_key'=>$openid['client_id'], 'openid'=>$openid['openid']]);
$qquser['openid']=$openid['openid'];
return $qquser;
}
protected function defaultName()
{
return 'qq';
}
protected function defaultTitle()
{
return 'Qq';
}
/**
* 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('Unable to determine response content type automatically.');
}
$response = $this->processResponse($rawResponse, $contentType);
break;
}
case self::CONTENT_TYPE_JSON: {
$response = Json::decode($rawResponse, true);
if (isset($response['error'])) {
throw new Exception('Response error: ' . $response['error']);
}
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('Unknown response type "' . $contentType . '".');
}
}
return $response;
}
}
config/main.php 파일 을 변경 합 니 다.components 에서 증가 합 니 다.대체적으로 다음 과 같 습 니 다.
'components' => [
'authClientCollection' => [
'class' => 'yii\authclient\Collection',
'clients' => [
'qq' => [
'class'=>'common\components\QqOAuth',
'clientId'=>'your_qq_clientid',
'clientSecret'=>'your_qq_secret'
],
],
]
]
SiteController.php 는 공식 대로
public function successCallback($client)
{
$attributes = $client->getUserAttributes();
// $attributes ,
// QQ , , $client->id 。
}
마지막 으로 로그 인 한 보기 파일 에 QQ 로그 인 링크 추가
<a href="/site/auth?authclient=qq"> QQ </a>
PS:이 사이트 의 phop 포맷 미화 도 구 를 추천 합 니 다.php 코드 온라인 포맷 미화 도구:http://tools.jb51.net/code/phpformat
Yii 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 고 는 Yii 프레임 워 크 를 기반 으로 한 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Yii 2 에서 OAuth 확장 및 QQ 상호 접속 로그 인 실현 방법본 고 는 Yii 2 에서 OAuth 확장 및 QQ 상호 접속 로그 인 실현 방법 을 실례 로 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다. Yii 2 의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.