>  기사  >  백엔드 개발  >  WeChat 로그인을 PHP의 laravel 프레임워크와 신속하게 통합하는 방법

WeChat 로그인을 PHP의 laravel 프레임워크와 신속하게 통합하는 방법

高洛峰
高洛峰원래의
2017-01-14 11:44:382208검색

이 기사는 PHP 언어 laravel 프레임워크 사용자를 대상으로 하며 이 프레임워크를 기반으로 하는 간단한 통합 WeChat 로그인 방법을 소개합니다. 그것을 사용하는 방법:

1. php_weixin_provider 설치

작곡가를 실행하려면 설치를 완료하려면 프로젝트 아래에 thirdproviders/weixin이 필요합니다. 성공적으로 설치되면 프로젝트의 공급업체 디렉터리에서 php_weixin_provider 라이브러리 파일을 볼 수 있습니다.

WeChat 로그인을 PHP의 laravel 프레임워크와 신속하게 통합하는 방법

2. WeChat 로그인 매개변수 구성

구성할 수 있는 매개변수는 총 7개입니다.

client_id: 공식 계정에서 생성한 애플리케이션 appid에 해당

client_secret: 공용 계정에서 생성된 애플리케이션 appid에 해당

리디렉션: WeChat 인증 성공 후 콜백 주소에 해당합니다.

Proxy_url: WeChat에서 승인한 프록시 서비스 주소에 해당합니다(해당 기능을 이해하려면 이 문서를 읽어보세요).

기기: PC에서의 WeChat 로그인과 모바일에서의 WeChat 로그인의 차이점은 기본값은 PC입니다.

state_cookie_name: 승인 링크에는 임의의 상태 매개변수가 포함됩니다. 이 매개변수는 WeChat이 콜백할 때 그대로 반환됩니다. 이때 상태 매개변수가 전달된 매개변수와 동일한지 확인하여 요청이 유효한지 여부를 확인할 수 있습니다. 인증 링크. CSRF 공격을 방지합니다. 이 솔루션은 먼저 권한 부여 중에 상태 매개변수를 쿠키에 저장하므로 이 매개변수는 상태 매개변수가 저장되는 쿠키의 이름을 지정하는 데 사용됩니다. 기본값은 wx_state_cookie입니다.

state_cookie_time: wx_state_cookie의 유효 기간을 지정하며 기본값은 5분입니다.

이 7개 매개변수에는 2가지 설정 방법이 있습니다.

첫 번째는 .env 구성 파일에서 이러한 매개변수를 대문자로 구성하는 것입니다.

WeChat 로그인을 PHP의 laravel 프레임워크와 신속하게 통합하는 방법

참고: 1. 각 구성 항목은 대문자로 시작되며 WEIXIN_으로 시작합니다. 2. 처음 세 개의 구성 항목은 앞에서 소개한 매개변수 이름과 정확히 동일하지 않습니다. KEY는 client_id에 해당하고, SECRET는 client_secret에 해당하고, REDIRECT_URI는 리디렉션에 해당합니다. 다른 것들은 이전에 소개된 매개변수 이름과 일치합니다.

두 번째는 이러한 매개변수를 config/services.php 파일에 구성하는 것입니다:

WeChat 로그인을 PHP의 laravel 프레임워크와 신속하게 통합하는 방법

이러한 방식으로 구성하려면 각 구성 항목의 이름이 이전에 소개한 것과 일치합니다.

참고 사항:

php_weixin_provider는 laravel/socialite 기반으로 구현되기 때문에 client_id, client_secret, Redirect를 반드시 설정해야 합니다. 그렇지 않으면 client_id와 client_secret에 대해 php_weixin_provider 인스턴스화 과정에서 오류가 발생하므로 하나로 설정하는데는 문제가 없을 것 같습니다. 그러나 리디렉션의 경우 균일하게 구성하면 모든 시나리오의 요구 사항을 충족하지 못할 수 있습니다. 왜냐하면 WeChat 로그인이 사용되는 모든 장소가 아니기 때문입니다. 최종 콜백 주소는 동일하므로 리디렉션을 유효한 주소로 구성하는 것이 좋습니다. 비어 있지 않은 잘못된 콜백 주소; 어쨌든 나중에 php_weixin_provider를 사용할 때 호출할 때 이 매개변수의 값을 변경할 수도 있습니다.

Proxy_url이 존재하는 경우 공개 장소에서 구성하는 것이 좋습니다.

state_cookie_name과 state_cookie_time은 모두 기본값을 가지므로 기본적으로 재구성할 필요가 없습니다.
장치를 사용할 때 지정할 수 있습니다.

모든 구성 매개변수는 사용 중에 다시 지정할 수 있습니다.

3. php_weixin_provider 등록

프로젝트의 config/app.php 파일에서 공급자 구성 섹션을 찾아 해당 구성 배열에 다음 코드를 추가합니다.

WeChat 로그인을 PHP의 laravel 프레임워크와 신속하게 통합하는 방법

4. 제3자 로그인 이벤트 모니터링을 위해 등록

프로젝트의 app/Providers/EventServiceProvider.php에 다음 코드를 추가합니다.

WeChat 로그인을 PHP의 laravel 프레임워크와 신속하게 통합하는 방법

laravel 프레임워크는 전체적으로 IOC이며 이벤트 중심 아이디어입니다. js에 익숙하다면 이벤트 중심에도 매우 익숙할 것입니다. 디자인 패턴에 익숙하다면 IOC(Inversion of Control)에도 익숙할 것입니다. , DI: 종속성 주입이라고도 함) 이는 3단계와 4단계에서 구성의 역할을 이해하는 데 핵심입니다.

5. WeChat 로그인을 위한 인터페이스 작성

예는 다음과 같습니다:

으아악

Socialite::with('weixin')은 다음과 같은 php_weixin_provider 인스턴스를 반환합니다.

WeChat 로그인을 PHP의 laravel 프레임워크와 신속하게 통합하는 방법

拿到这个实例之后,就可以采用链式的方式调用它提供的所有public方法,比如设置配置参数,setDevice等等。

6. 编写微信登录回调的接口

举例如下:

//登录回调
Route::get('/login/notify', function () {
 $user = null;
 try {
  $user = Socialite::with('weixin')->user();
 } catch(\Exception $e) {
  return '获取微信用户异常';
 }
 return $user->nickname;
});

通过Socialite::with('weixin')拿到php_weixin_provider实例后,调用user方法,就会自动跟微信调用相关接口,并把微信的返回值封装成对象返回。如果在此过程中,有任何错误都会以异常的形式抛出,比如state参数校验失败,比如code失效等。

返回的$user对象包含的有效属性有:

WeChat 로그인을 PHP의 laravel 프레임워크와 신속하게 통합하는 방법

小结:

这个方案是基于laravel/socialite实现,并发布到composer来使用的。laravel/socialite是laravel官方提供的第三方登录的模块,基于它可以很方便的集成大部分第三方平台的认证,目前它官方已经提供很多第三方的登录实现:https://socialiteproviders.github.io/。除了国外的facebook,google,github等,国内的微信,微博,qq也都有提供。我在一开始也用的是它官方提供的默认的微信登录provider来做的,但是后来我发现了以下几个问题:

1. 不支持微信授权的代理;

2. pc端跟移动端竟然还是分两个项目来做的: 

WeChat 로그인을 PHP의 laravel 프레임워크와 신속하게 통합하는 방법

3. 它封装的user对象里竟然不包含unionid

4. 更改配置参数的方式,实在是让人觉得难以使用: 

WeChat 로그인을 PHP의 laravel 프레임워크와 신속하게 통합하는 방법

所以我就在它官方的微信登录provider基础上,按照自己的想法,重新实现了一个来解决我发现的这些问题。

更多WeChat 로그인을 PHP의 laravel 프레임워크와 신속하게 통합하는 방법相关文章请关注PHP中文网!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.