Yii2에서 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/Site Controller입니다.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([
'baseAuthUrl' => ['site/auth']
])?>
이상은 공식적인 설명서입니다. 다음은 QQ로 연결하겠습니다
QQ 로그인 구성 요소를 추가합니다. 여기는common/components/QqOAuth에 있습니다.php에서 원본 코드는 다음과 같습니다
[
* '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
* @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 로그인 링크를 추가합니다
QQ로 빠른 로그인
PS: 편집자는 이 사이트의 php 포맷 미화 도구를 추천합니다. 앞으로 PHP 프로그램 디자인에서 코드 조판을 할 수 있도록 도와줍니다. php 코드 온라인 포맷 미화 도구:http://tools.jb51.net/code/phpformat
Yii 관련 내용에 관심이 많은 독자들은 본 사이트의 주제를 보실 수 있습니다.,,,,,,,,,《php+mysql 데이터베이스 조작 입문 강좌》 및 《php 흔한 데이터베이스 조작 기교 총집합》
이 글은 Yii 프레임워크를 바탕으로 하는 PHP 프로그램 설계에 도움이 되었으면 합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.