VorwortWenn das WeChat-Miniprogrammprojekt das Abrufen von Benutzerinformationen und die Implementierung der Benutzeranmeldung umfasst, können Sie die WeChat-Benutzeridentität problemlos über die von WeChat offiziell bereitgestellte Anmeldefunktion abrufen und schnell ein Benutzersystem innerhalb des Miniprogramms einrichten. Das offizielle Dokument enthält nur Informationen zum Aufrufen der autorisierten Anmeldung. Wenn Sie das Dokument einfach so kopieren, um den Code zu schreiben, führt dies zwangsläufig zu einer schlechten Wartbarkeit des Codes. Daher konzentriert sich dieser Artikel darauf, wie die autorisierte Anmeldung des WeChat-Applets eleganter gehandhabt werden kann. Grundsätzlicher Ablauf der autorisierten AnmeldungDas obige Bild ist das grundlegende Flussdiagramm der autorisierten Anmeldung, das von der offiziellen Website des WeChat Mini-Programms bereitgestellt wird. Hier werde ich den Prozess nur aus der Perspektive der Front-End-Entwicklung erklären.
Nachdem Sie den allgemeinen Anmeldevorgang verstanden haben, können Sie mit dem Schreiben von Code beginnen. Da die von WeChat bereitgestellten API-Schnittstellenaufrufe der Codewartung nicht förderlich sind, habe ich Promise verwendet, um den Prozess zu kapseln (wenn Sie es nicht verstehen, finden Sie eine ausführliche Einführung im ES6-Dokument). Dies hat den Vorteil, dass Sie die Schnittstellenaufrufe in Zukunft verketten und auch async/await (ES6-Syntax) kombinieren können, um die asynchrone Schnittstelle zu synchronisieren. Kapselung von Get/Post-SchnittstellenErstellen Sie im Stammverzeichnis einen Serviceordner, um den Code für die Schnittstelle zu speichern. Erstellen Sie im Serviceordner eine Datei myRequest.js und kapseln Sie die Get/Post-Anforderung des Applets ein. Der Code lautet wie folgt: // Anforderungskapselung abrufen (Seitenbeurteilung überspringen) //Globale Variablen können über die globale Funktion getApp abgerufen werden. Globale Daten können in app.js im Stammverzeichnis festgelegt werden. let app=getApp(); const myGet = (URL, Daten)=>{ returniere neues Promise((lösen, ablehnen)=>{ wx.Anfrage({ URL: `${app.globalData.HTTP}${url}`, Daten:Daten, Methode:"GET", //Diese Autorisierung ist der Wert, der die OpenID- und Session_Key-Informationen enthält header: { 'authorization': app.globalData.authorization}, //Holen Sie sich die Benutzerinformationen aus der globalen Variable und fügen Sie sie in den Anforderungsheader ein success:(res)=>{ wenn (res.data.code == 409) { //409 bedeutet, dass der Benutzer nicht angemeldet ist, daher wird er gezwungen, zur schriftlichen Anmeldeseite zu springen wx.navigateTo({ URL: „../login/login“ }) } anders{ auflösen(res.data); } }, Fehler: (Res) => { ablehnen(); } }) }) } // Kapselung der Post-Anforderung (Beurteilung der Sprungseite) const myPost = (URL, Daten) => { returniere neues Promise((lösen, ablehnen) => { wx.Anfrage({ URL: `${app.globalData.HTTP}${url}`, Daten: Daten, Methode: "POST", Header: { 'Autorisierung': app.globalData.authorization}, Erfolg: (res) => { wenn (res.data.code == 409){ wx.navigateTo({ URL: „../login/login“ }) }anders{ auflösen(res.data); } }, fehlgeschlagen: (res) => { ablehnen(); } }) }) } modul.exporte = { meinGet, meinPost, } Der Code für die globale Variablenkonfiguration von app.js lautet wie folgt (beachten Sie, dass die Daten der globalen Variablen nach dem Aktualisieren der Seite oder dem erneuten Aufrufen des Miniprogramms initialisiert werden und der aktuelle Datenstatus nicht dauerhaft gespeichert werden kann): //app.js App({ beim Starten: Funktion() { //Hier können Sie Code schreiben, der entsprechend den tatsächlichen Anforderungen des Projekts zur Projektinitialisierung ausgeführt werden muss}, globalData: { HTTP: "https://shop.yamecent.com/", //Nachdem wir die OpenID und den Sitzungsschlüssel erhalten haben, speichern wir sie in der Autorisierung des Applet-Speichers, sodass die Daten nicht verloren gehen, es sei denn, die Applet-Autorisierung wird gelöscht: wx.getStorageSync('authorization') || "", //Holen Sie sich die im Applet-Speicher gespeicherte Autorisierung } }) Kapselung der Autorisierungs-AnmeldeschnittstelleDieser Teil der Kapselung verwendet async/await, um die asynchrone Schnittstelle synchron zu verarbeiten. Wenn Sie es nicht verstehen, können Sie die Beschreibung im ES6-Dokument nachschlagen. Erstellen Sie login.js im Serviceordner. Der Code lautet wie folgt: const myRequest = require('./myRequest.js'); const app = getApp(); const HTTP = app.globalData.HTTP; //WeChat-Anmeldeschnittstelle zum Abrufen der Codekapselung const myLogin=()=>{ returniere neues Promise((lösen, ablehnen)=>{ wx.login({ Erfolg:(res)=>{ auflösen(res.code); }, Fehler: (Res) => { ablehnen(res.errMsg); console.log("WeChat-Anmeldung und Codeabruf fehlgeschlagen"); } }) }) } //OpenID und Session_Key-Schnittstellenkapselung abrufen const getUserMsg=(myUrl,myData)=>{ returniere neues Promise((lösen,ablehnen)=>{ wx.Anfrage({ URL: meineURL, Methode: "POST", Daten: meineDaten, Erfolg:(res)=>{ wenn(res.data.code==500){ //Abrufen fehlgeschlagen wx.showToast({ Titel: res.data.msg, Symbol: „keine“, Dauer: 2000, Maske:wahr, }) resolve(500); //Bei Fehlschlag 500 zurückgeben }anders{ auflösen(res.data.data); } }, Fehler: (Res) => { ablehnen(res.data.msg); console.log("OpenID- und Session_Key-Schnittstellen konnten nicht abgerufen werden"); } }) }) } //Speicher kapseln (Hinweis: Der Speichervorgang ist hier asynchron) const mySetStorage=(Schlüssel,Wert)=>{ returniere neues Promise((lösen, ablehnen) => { wx.setStorage({ Schlüssel: Schlüssel, Daten: Wert, Erfolg: () => { Entschlossenheit (wahr); }, fehlgeschlagen: () => { ablehnen (falsch); } }) }) } //Speicher kapseln const myGetStorage=(key)=>{ returniere neues Promise((lösen,ablehnen)=>{ wx.getStorage({ Schlüssel: 'Schlüssel', Erfolg: (res)=>{ auflösen(res.data); }, Fehler:()=>{ reject("Speicher konnte nicht abgerufen werden"); } }) }) } //Kapselung der Autorisierungsmethode //sendData sind die Benutzerinformationen, die über die Autorisierungsschaltfläche erhalten wurden. Hier werden sie als Parameter an den Hintergrund übergeben, um die Benutzerinformationen zu speichern //cb ist die Funktion, die nach erfolgreicher Autorisierungsanmeldung ausgeführt werden soll. Die spezifische Funktion hängt von den Projektanforderungen ab und ist möglicherweise nicht erforderlich const myAuthorize = (sendData,cb="") => { asynchrone Funktion akkreditieren() { wx.showLoading({ Titel: „Zertifizierung in Bearbeitung“, Maske: wahr }) let code = await myLogin(); //WeChat-Login, um Code-Schnittstelle zu erhalten sendData.code=code; let author = await getUserMsg(`${HTTP}auth`, sendData); //Holen Sie sich die OpenID-Sitzungsschlüsselschnittstelle im Hintergrund wx.hideLoading(); wenn(Autor==500){ zurückkehren; } warte auf mySetStorage("authorization", author.Authorization); //Im Speicher speichern, das Applet aufrufen, um es abzurufen und in app.globalData zu speichern app.globalData.authorization = author.Authorization; typeof cb == "function" && cb(author); //Für den Rückruf benötigte Anmeldestatusparameter //Hier kann weitere Geschäftslogik hinzugefügt werden, wie etwa die Anzahl der Einkaufswagen von Tabbar-Benutzern usw. wx.showToast({ Titel: 'Erfolgreiche Autorisierung', Symbol: „Erfolg“, Dauer: 2000, Maske: wahr }); } akkreditieren(); } modul.exporte = { myAuthorize, meinSetStorage, myGetStorage } Nachdem die Autorisierungsanmeldung verpackt wurde, sehen wir uns an, wie sie im Projekt verwendet wird. Da die Autorisierung des WeChat-Applets nur durch eine Schaltfläche ausgelöst werden kann, verwenden Sie die Schaltflächenkomponente und geben Sie den offenen Typ als getUserInfo-Typ an, um die grundlegenden Informationen des Benutzers abzurufen. Der login.wxml-Code lautet wie folgt: <button class='btn' open-type="getUserInfo" bindgetuserinfo='gotoLogin'>Jetzt anmelden</button> Der login.js-Code lautet wie folgt: // Seiten/Login/Login.js const myRequest = require('../../common/script/myRequest.js'); const login = erfordern('../../common/script/login.js'); const app = getApp(); const HTTP = app.globalData.HTTP; Seite({ /** * Ausgangsdaten der Seite */ Daten: { }, gotoLogin: Funktion (e) { let sendOjb={};//Wird zum Speichern von Benutzerinformationen verwendetif (e.detail.errMsg == "getUserInfo:ok"){ sendOjb = { avatar: e.detail.userInfo.avatarUrl, Spitzname: e.detail.userInfo.nickName, Geschlecht: e.detail.userInfo.gender, Provinz: e.detail.userInfo.province, Stadt: e.detail.userInfo.city}; login.myAuthorize(sendOjb,()=>{ wx.navigateBack(); //Nach erfolgreichem Abschluss zur vorherigen Seite zurückkehren oder eine andere Logik entsprechend den Projektanforderungen schreiben}) }anders{ } }, /** * Lebenszyklusfunktion - auf Seitenladen warten*/ onLoad: Funktion (Optionen) { }, }) AbschlussDer obige Code kann kopiert und in Ihr eigenes WeChat-Applet-Projekt eingefügt werden und wird normal ausgeführt. Wenn es Fehler oder Bereiche gibt, die verbessert werden müssen, kontaktieren Sie mich bitte und ich werde sie rechtzeitig korrigieren. Damit ist dieser Artikel über die elegante Handhabung der autorisierten Anmeldung beim WeChat Mini-Programm abgeschlossen. Weitere relevante Inhalte zur autorisierten Anmeldung beim WeChat Mini-Programm finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Grafisches Tutorial zur Installation von MySQL 5.5 unter Win7
>>: So stellen Sie Node.js mit Docker bereit
Inhaltsverzeichnis 1. So wechseln Sie 2. Register...
Mit beiden Methoden kann ein JavaScript-Code nach...
Frage: <input type="hidden" name=&qu...
Vorwort 1. Dieser Artikel verwendet MySQL 8.0 Ver...
Wenn Sie ein Upgrade in einer formalen Umgebung d...
Ich habe kürzlich ein WeChat-Applet geschrieben u...
1. Überprüfen Sie den Zeichensatz 1. Überprüfen S...
Ich bin heute auf mehrere Browserkompatibilitätsp...
Nehmen Sie für eine neu erstellte Website ASP.NET...
DNS (Domain Name Server) ist ein Server, der Domä...
Fallbeschreibung: - Verwenden Sie Tabellen, um Se...
Inhaltsverzeichnis Indexmodell B+Baum Indexauswah...
Ich habe zuvor einen Artikel über rekursive Abfra...
Vorwort: Im täglichen Studium und bei der Arbeit ...
Im vorherigen Artikel habe ich beschrieben, wie s...