So integrieren Sie die WeChat-Anmeldung schnell in das Laravel-Framework von PHP

高洛峰
Freigeben: 2023-03-04 19:10:01
Original
2199 Leute haben es durchsucht

Dieser Artikel richtet sich an Benutzer des PHP-Sprach-Laravel-Frameworks. Er stellt eine einfache integrierte WeChat-Anmeldemethode vor, die auf diesem Framework basiert. So verwenden Sie es:

1. Installieren Sie php_weixin_provider

Führen Sie Composer require Thirdproviders/Weixin unter dem Projekt aus, um die Installation abzuschließen. Nach erfolgreicher Installation sollten Sie die Bibliotheksdatei php_weixin_provider im Herstellerverzeichnis des Projekts sehen können:

So integrieren Sie die WeChat-Anmeldung schnell in das Laravel-Framework von PHP

2. Konfigurieren Sie die WeChat-Anmeldeparameter

Insgesamt sind 7 Parameter konfigurierbar, nämlich:

client_id: entspricht der Anwendungs-App-ID, die vom offiziellen Konto erstellt wurde

client_secret: entspricht der Anwendungs-App-ID, die vom öffentlichen Konto erstellt wurde

Weiterleitung: Entspricht der Rückrufadresse nach erfolgreicher WeChat-Autorisierung

Proxy_URL: entspricht der von WeChat autorisierten Proxy-Dienstadresse (Sie können diesen Artikel lesen, um seine Funktion zu verstehen)

Gerät: Der Unterschied besteht zwischen der WeChat-Anmeldung auf dem PC und der WeChat-Anmeldung auf dem Mobilgerät. Wenn es sich um ein mobiles Gerät handelt, kann es auf leer gesetzt werden.

state_cookie_name: Der Autorisierungslink enthält einen zufälligen Statusparameter. Dieser Parameter wird intakt zurückgegeben, wenn WeChat zurückruft. Zu diesem Zeitpunkt können Sie feststellen, ob die Anforderung gültig ist, indem Sie überprüfen, ob der Statusparameter mit dem im übergebenen Parameter übereinstimmt Autorisierungslink. Verhindern Sie CSRF-Angriffe. Diese Lösung speichert den Statusparameter zunächst während der Autorisierung im Cookie. Daher wird dieser Parameter verwendet, um den Namen des Cookies anzugeben, in dem der Statusparameter gespeichert ist. Der Standardwert ist wx_state_cookie.

state_cookie_time: Gibt die Gültigkeitsdauer von wx_state_cookie an, der Standardwert beträgt 5 Minuten

Für diese sieben Parameter gibt es zwei Einstellmethoden.

Die erste besteht darin, diese Parameter in Großbuchstaben in der .env-Konfigurationsdatei zu konfigurieren:

So integrieren Sie die WeChat-Anmeldung schnell in das Laravel-Framework von PHP

Hinweis: 1. Jedes Konfigurationselement wird großgeschrieben und beginnt mit WEIXIN_. 2. Die ersten drei Konfigurationselemente sind nicht genau die gleichen wie die zuvor eingeführten Parameternamen. KEY entspricht client_id, und REDIRECT_URI entspricht redirect 3 Andere stimmen mit den zuvor eingeführten Parameternamen überein.

Die zweite besteht darin, diese Parameter in der Datei config/services.php zu konfigurieren:

So integrieren Sie die WeChat-Anmeldung schnell in das Laravel-Framework von PHP

Für eine Konfiguration auf diese Weise stimmt der Name jedes Konfigurationselements mit dem zuvor eingeführten überein.

Dinge zu beachten:

Da php_weixin_provider auf Basis von Laravel/Socialite implementiert wird, müssen client_id, client_secret und Redirect konfiguriert werden. Andernfalls tritt während des Instanziierungsprozesses von php_weixin_provider ein Fehler auf. Für client_id und client_secret ist es meiner Meinung nach kein Problem, sie in einem zu konfigurieren Ort, aber für die UmleitungWenn es einheitlich konfiguriert ist, erfüllt es möglicherweise nicht die Anforderungen aller Szenarien, da die endgültige Rückrufadresse nicht an jedem Ort identisch ist, an dem WeChat verwendet wird. Daher wird empfohlen, die Umleitung auf eine gültige oder zu konfigurieren ungültige, nicht leere Rückrufadresse; Bei späterer Verwendung von php_weixin_provider können Sie den Wert dieses Parameters auch beim Aufruf ändern.

Wenn die Proxy-URL vorhanden ist, wird empfohlen, sie an einem öffentlichen Ort zu konfigurieren.

Da state_cookie_name und state_cookie_time beide Standardwerte haben, besteht grundsätzlich keine Notwendigkeit, sie neu zu konfigurieren
Bei der Nutzung kann das Gerät angegeben werden.

Alle Konfigurationsparameter können während der Nutzung neu angegeben werden.

3. Registrieren Sie php_weixin_provider

Suchen Sie in der Datei config/app.php des Projekts den Abschnitt „Provider-Konfiguration“ und fügen Sie den folgenden Code zu seinem Konfigurationsarray hinzu:

So integrieren Sie die WeChat-Anmeldung schnell in das Laravel-Framework von PHP

4. Registrieren Sie sich für die Überwachung von Anmeldeereignissen Dritter

Fügen Sie den folgenden Code zur app/Providers/EventServiceProvider.php des Projekts hinzu:

So integrieren Sie die WeChat-Anmeldung schnell in das Laravel-Framework von PHP

Das Laravel-Framework als Ganzes ist eine IOC- und ereignisgesteuerte Idee. Wenn Sie mit js vertraut sind, sind Sie mit ereignisgesteuerten Mustern vertraut , auch bekannt als DI: Dependency Injection). Dies ist der Schlüssel zum Verständnis der Rolle der Konfiguration in den Schritten 3 und 4.

5. Schreiben Sie eine Schnittstelle für die WeChat-Anmeldung

Beispiele sind wie folgt:

//采用代理跳转,从PC端微信登录
Route::get('/login', function () {
 return Socialite::with('weixin')
  ->setProxyUrl('http://proxy.your.com')
  ->setRedirectUrl(url('/login/notify'))
  ->redirect();
});
//采用代理跳转,从手机端微信登录
Route::get('/login2', function () {
 return Socialite::with('weixin')
  ->setProxyUrl('http://proxy.your.com')
  ->setDevice('')
  ->setRedirectUrl(url('/login/notify'))
  ->redirect();
});
//不采用代理跳转,从PC端微信登录
Route::get('/login', function () {
 return Socialite::with('weixin')
  ->setRedirectUrl(url('/login/notify'))
  ->redirect();
});
//不采用代理跳转,从手机端微信登录
Route::get('/login4', function () {
 return Socialite::with('weixin')
  ->setDevice('')
  ->setRedirectUrl(url('/login/notify'))
  ->redirect();
});
Nach dem Login kopieren

Socialite::with('weixin') gibt eine Instanz von php_weixin_provider zurück, die lautet:

So integrieren Sie die WeChat-Anmeldung schnell in das Laravel-Framework von PHP

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

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

举例如下:

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

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

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

So integrieren Sie die WeChat-Anmeldung schnell in das Laravel-Framework von PHP

小结:

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

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

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

So integrieren Sie die WeChat-Anmeldung schnell in das Laravel-Framework von PHP

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

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

So integrieren Sie die WeChat-Anmeldung schnell in das Laravel-Framework von PHP

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

更多So integrieren Sie die WeChat-Anmeldung schnell in das Laravel-Framework von PHP相关文章请关注PHP中文网!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!