thinkpHP 5 프로젝트 에서 QQ 제3자 로그 인 기능 구현
최근 에 thinkpHP 5 프레임 워 크 로 웨딩드레스 가게 프로젝트 를 만 들 었 습 니 다.개발 과정 에서 제3자 로그 인 을 해 야 합 니 다.텐 센트 가 공식 적 으로 준 사례 는 몇 개의 파일 이 서로 포함 되 어 실 현 된 것 입 니 다.tp5 에 넣 으 면 슬 프 게 도 컨트롤 러 에서 include 나 require 를 통 해 기대 기능 을 완성 하지 못 한 다 는 것 을 발 견 했 습 니 다.텐 센트 공식 적 으로 봉 한 유형 은 반드시 수정 해 야 합 니 다.다음 과 같이 수정 해 야 합 니 다.
1.공식 SDK 의 핵심 파일 찾기
프레임 밖에서 사용 할 때
include 'qqConnectAPI.php'
이 파일 을 열 면 다른 몇 개의 파일 이 포함 되 어 있 는 것 을 볼 수 있 습 니 다.comm 폴 더 에 있 는 몇 개의 파일 은 상수 만 정의 하 는 것 이 아니 라 APP KEY 라 는 정 보 를 기록 하 는 것 도 중요 하지 않 습 니 다.class 파일 에 끼 워 넣 은 몇 가지 파일 을 tp5 에 넣 으 면 됩 니 다.그리고 코드 를 자세히 보면 세 가지 만 받 으 면 기능 을 충분히 실현 할 수 있다 는 것 을 알 수 있 습 니 다.2.tp 프레임 에 넣 기
tp5 는 제3자 의 것 을 추천 하 는 동시에 coposer 가 설치 한 것 도 아 닌 extend 디 렉 터 리 에 통일 적 으로 넣 는 것 을 추천 합 니 다.나중에 다른 확장 을 해 야 할 수도 있 기 때문에 qq 로그 인 과 관련 된 qqlogin 폴 더 를 따로 만 듭 니 다.
안에 세 가지 종류 만 있 는 것 을 볼 수 있 습 니 다.저 는 Recorder 와 Errorcase 류 를 제 거 했 습 니 다.이름 을 알 수 있 습 니 다.이 두 가지 역할 은 정 보 를 기록 하 는 것 입 니 다.예 를 들 어 accesstoken,그리고 이상 처리 가 있어 서 여 기 는 제 가 바로 지 울 게 요.또한 psr 4 규범 에 따라 클래스 이름 은 파일 이름과 일치 해 야 하기 때문에 파일 이름 을 바 꾸 는 동시에 네 임 스페이스 extend\qqlogin,tp5 모든 클래스 에 네 임 스페이스 가 있어 야 합 니 다.
또한 tp5 에서 우리 가 필요 로 하 는 파일 을 찾 지 못 하 는 것 을 방지 하기 위해 config.php 파일 에 이름 공간 을 등록 하 는 것 이 좋 습 니 다.30 번 째 줄 에 있 습 니 다.
//
'root_namespace' => [
'extend\qqlogin' => '../extend/qqlogin/',
'extend\baidu' => '../extend/bdlogin/'
],
3.소스 코드 개조QC.php 는 Oauth.php 를 계 승 했 기 때문에 우 리 는 후자 부터 바 꾸 고 require 를 제거 합 니 다.once,네 임 스페이스 라 는 것 은 말 하지 않 겠 습 니 다.먼저 구성원 속성 을 보 겠 습 니 다.상수 가 텐 센트 플랫폼 의 주소 입 니 다.신경 쓰 지 마 세 요.원래 세 가지 속성 이 있 습 니 다.recorder,error 는 필요 하지 않 습 니 다.주석 을 지우 거나 직접 삭제 합 니 다.다음 글 역시 이 두 단어 와 원한 이 있다 고 상상 하고 보고 주석 을 달 거나 지 워 야 한다.
// protected $recorder;
public $urlUtils;
// protected $error;
public $state;
public $appid = "****";
public $callback = "http://****/index/user/qqcallback";
public $scope = "get_user_info";
다음 네 가지 속성 은 추가 해 야 합 니 다.state 는 CSRF 공격 을 방지 하 는 데 사 용 됩 니 다.다음 세 가 지 는 공식 문 서 를 보면 뭔 지 알 수 있 습 니 다.이것 은 원래 comm 폴 더 에 있 는 inc.php 에 저 장 된 것 이 었 는데 지금 은 직접 가 져 와 서 멤버 속성 이 되 었 습 니 다.그 다음 에 구조 함수,실례 화 세 가지 유형 은 두 가지 가 존재 하지 않 습 니 다.그리고 위 에서 말 했 듯 이 이 두 단어 와 원한 이 있 으 면 주석 을 달 거나 지 워 야 합 니 다.
다음 첫 번 째 멤버 방법 을 보 겠 습 니 다.
qq_login()
public function qq_login(){
$appid = $this->recorder->readInc("appid");
$callback = $this->recorder->readInc("callback");
$scope = $this->recorder->readInc("scope");
//--- CSRF
$state = md5(uniqid(rand(), TRUE));
$this->recorder->write('state',$state);
*
*
return $login_url;
// header("Location:$login_url");
}
우 리 는 이미 원한 이 있어 서 그 두 단어 가 있 는 이 몇 줄 을 지 웠 다.우 리 는 또 이런 것들 이 필요 하 다.우리 위 에 세 명의 멤버 속성 이 추가 되 었 다 는 것 을 잊 지 마라.이런 값 은 우리 가 이미 아래 에서 사용 할 때$this->appid
를 통과 하면 된다.state 인증 을 할 때 우 리 는 session 을 통 해 검증 할 수 있 습 니 다.tp5 에서 조수 함 수 를 제공 하여 session 을 쓸 수 있 습 니 다.
session('state',$this->state);
마지막 한 마디 는 header 점프 입 니 다.tp5 에서 점프 효 과 를 볼 수 없 기 때문에 url 을 직접 되 돌려 주 고 컨트롤 러 에서 tp5 의 리 셋 함수$this->redirect()
를 통 해 점프 를 실현 합 니 다.다음은 qqcallback()
public function qq_callback(){
// $state = $this->recorder->read("state");
//--- state CSRF
if(input('state') != session('state')){
// $this->error("30001");
exit('30001');
}
*
*
// return $params["access_token"];
session('access_token',$params["access_token"]);
}
그 두 단어 가 나 온 주석 입 니 다.우 리 는 qq 에 있 습 니 다.login 에 session 이 라 고 쓰 여 있 습 니 다.여기 서 sessio 를 직접 비교 하면 됩 니 다.input()도 tp5 의 조수 함수 입 니 다.get,post 가 요청 한 인 자 를 얻 을 수 있 습 니 다.결 과 는 하나의 배열 이지 만 키 쌍 을 동적 으로 추가 할 수 없습니다.추가 하려 면 변 수 를 부여 하고 변 수 를 조작 해 야 합 니 다.여기에 오류 가 있 으 면 직접 exit 에서 오류 번 호 를 인쇄 하고 공식 문서 에 상세 한 오류 번호 설명 이 있 습 니 다.마지막 에 도 직접 얻 을 accesstoken 세 션 에 쓰기.아래
get_openid()
방법 은 유사 합 니 다.매개 변수 목록 은 session 으로 구축 되 고 반환 값 은 session 에 직접 기록 합 니 다.그리고 QC.php 를 수정 합 니 다.구조 방법 을 수정 하고 배열 의 세 변 수 를 값 에 주면 됩 니 다.
$this->keysArr = array(
"oauth_consumer_key" => (int)$this->appid,
"access_token" => session('access_token'),
"openid" => session('openid')
);
4.컨트롤 러 호출개조 가 완료 되 었 습 니 다.컨트롤 러 에서 사용 할 수 있 습 니 다.코드 를 첨부 하여 입력 하 십시오.
use extend\qqlogin\QC;
// qq
public function qqlogin()
{
$qq = new QC();
$url = $qq->qq_login();
$this->redirect($url);
}
// qq
public function qqcallback(UserModel $user)
{
$qq = new QC();
$qq->qq_callback();
$qq->get_openid();
$qq = new QC();
$datas = $qq->get_user_info();
* //
*
}
꼭 기억 하 세 요:리 셋 함수 에 서 는 두 번 의 QC 를 예화 해 야 사용자 정 보 를 얻 을 수 있 고,두 번 째 예화 할 때 만 openid 와 access 가 있 습 니 다.token 두 개의 인자.
thinkpHP 와 관련 된 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.,,,,,ThinkpHP 입문 강좌,thinkpHP 템 플 릿 조작 기법 요약,ThinkPHP 상용 방법 총화,codeigniter 입문 강좌,CI(CodeIgniter)프레임 워 크 진급 강좌과Zend FrameWork 프레임 워 크 입문 강좌.
본 고 는 ThinkPHP 프레임 워 크 를 기반 으로 한 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thinkpHP 5 프레임 워 크 가 페이지 조회 기능 을 실현 하 는 방법 예시본 고 는 thinkpHP 5 프레임 워 크 가 페이지 조회 기능 을 실현 하 는 방법 을 실례 로 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다. contr...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.