thinkpHP 5 프로젝트 에서 QQ 제3자 로그 인 기능 구현

6430 단어 thinkPHP5QQ로그 인
본 고 는 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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기