이 기사는 PHP 언어 laravel 프레임워크 사용자를 대상으로 하며 이 프레임워크를 기반으로 하는 간단한 통합 WeChat 로그인 방법을 소개합니다. 그것을 사용하는 방법:
1. php_weixin_provider 설치
작곡가를 실행하려면 설치를 완료하려면 프로젝트 아래에 thirdproviders/weixin이 필요합니다. 성공적으로 설치되면 프로젝트의 공급업체 디렉터리에서 php_weixin_provider 라이브러리 파일을 볼 수 있습니다.
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 구성 파일에서 이러한 매개변수를 대문자로 구성하는 것입니다.
참고: 1. 각 구성 항목은 대문자로 시작되며 WEIXIN_으로 시작합니다. 2. 처음 세 개의 구성 항목은 앞에서 소개한 매개변수 이름과 정확히 동일하지 않습니다. KEY는 client_id에 해당하고, SECRET는 client_secret에 해당하고, REDIRECT_URI는 리디렉션에 해당합니다. 다른 것들은 이전에 소개된 매개변수 이름과 일치합니다.
두 번째는 이러한 매개변수를 config/services.php 파일에 구성하는 것입니다:
이러한 방식으로 구성하려면 각 구성 항목의 이름이 이전에 소개한 것과 일치합니다.
참고 사항:
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 파일에서 공급자 구성 섹션을 찾아 해당 구성 배열에 다음 코드를 추가합니다.
4. 제3자 로그인 이벤트 모니터링을 위해 등록
프로젝트의 app/Providers/EventServiceProvider.php에 다음 코드를 추가합니다.
laravel 프레임워크는 전체적으로 IOC이며 이벤트 중심 아이디어입니다. js에 익숙하다면 이벤트 중심에도 매우 익숙할 것입니다. 디자인 패턴에 익숙하다면 IOC(Inversion of Control)에도 익숙할 것입니다. , DI: 종속성 주입이라고도 함) 이는 3단계와 4단계에서 구성의 역할을 이해하는 데 핵심입니다.
5. WeChat 로그인을 위한 인터페이스 작성
예는 다음과 같습니다:
으아악Socialite::with('weixin')은 다음과 같은 php_weixin_provider 인스턴스를 반환합니다.
拿到这个实例之后,就可以采用链式的方式调用它提供的所有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对象包含的有效属性有:
小结:
这个方案是基于laravel/socialite实现,并发布到composer来使用的。laravel/socialite是laravel官方提供的第三方登录的模块,基于它可以很方便的集成大部分第三方平台的认证,目前它官方已经提供很多第三方的登录实现:https://socialiteproviders.github.io/。除了国外的facebook,google,github等,国内的微信,微博,qq也都有提供。我在一开始也用的是它官方提供的默认的微信登录provider来做的,但是后来我发现了以下几个问题:
1. 不支持微信授权的代理;
2. pc端跟移动端竟然还是分两个项目来做的:
3. 它封装的user对象里竟然不包含unionid
4. 更改配置参数的方式,实在是让人觉得难以使用:
所以我就在它官方的微信登录provider基础上,按照自己的想法,重新实现了一个来解决我发现的这些问题。
更多WeChat 로그인을 PHP의 laravel 프레임워크와 신속하게 통합하는 방법相关文章请关注PHP中文网!