Heim >WeChat-Applet >Mini-Programmentwicklung >Wie greift das Miniprogramm auf den WeChat-Anmeldestatus zu und verwaltet ihn?
Um Miniprogrammanwendungen die Verwendung des WeChat-Anmeldestatus für autorisierte Anmeldungen zu erleichtern, bietet das WeChat-Miniprogramm eine offene Schnittstelle für die Anmeldeautorisierung. Auf den ersten Blick finde ich das Dokument sehr vernünftig, aber was die Umsetzung angeht, ist es wirklich verwirrend und ich weiß nicht, wie ich den Anmeldestatus verwalten und pflegen soll. In diesem Artikel erfahren Sie Schritt für Schritt, wie Sie im Unternehmen auf den WeChat-Anmeldestatus zugreifen und diesen beibehalten.
Zugriffsprozess
Das Flussdiagramm im offiziellen Dokument hier ist klar genug, daher werden wir es direkt ausarbeiten und ergänzen.
Wenn Sie dieses Bild sehen, werden Sie auf jeden Fall bemerken, dass das Miniprogramm nicht nur mit dem Miniprogramm-Frontend und unserem eigenen Server kommuniziert und interagiert. Aber auch der WeChat-Server eines Drittanbieters ist ebenfalls beteiligt. Welche Rolle spielt der WeChat-Server dabei? Lassen Sie uns gemeinsam den Login-Authentifizierungsprozess durchgehen und wir werden es verstehen.
1. Rufen Sie wx.login auf, um Code zu generieren
Die Funktion der wx.login()-API besteht darin, temporäre Anmeldeinformationen für den aktuellen Benutzer zu generieren Die Anmeldedaten sind nur fünf Minuten lang gültig. Nachdem wir diese Anmeldeinformationen erhalten haben, können wir mit dem nächsten Schritt fortfahren: openid und session_key abrufen
openid und session_key abrufen
Lassen Sie uns zunächst openid vorstellen Schuhe, die öffentliche Konten verwendet haben, sollten mit diesem Logo vertraut sein. Auf der öffentlichen Plattform wird es verwendet, um die eindeutige Identität jedes Benutzers in drei verschiedenen Anwendungen zu identifizieren: Abonnementkonto, Dienstkonto und Miniprogramm openid ist in jeder Anwendung inkonsistent, sodass wir im Miniprogramm openid verwenden können, um die Einzigartigkeit des Benutzers zu identifizieren. Wofür wird session_key verwendet? Mit der Benutzer-ID müssen wir dem Benutzer die Anmeldung ermöglichen. Anschließend stellt der Sitzungsschlüssel die Gültigkeit des Sitzungsvorgangs des aktuellen Benutzers sicher. Dieser Sitzungsschlüssel wird vom WeChat-Server an uns verteilt. Mit anderen Worten: Wir können diesen Bezeichner verwenden, um indirekt den Anmeldestatus unserer Applet-Benutzer aufrechtzuerhalten. Wie haben wir diesen Sitzungsschlüssel erhalten? Wir müssen die von WeChat bereitgestellte Drittanbieterschnittstelle https://api.weixin.qq.com/sns/jscode2session auf unserem eigenen Server anfordern. Diese Schnittstelle muss vier Parameterfelder mitbringen:Anhand dieser Parameter können wir erkennen, dass Sie zum Anfordern dieser Schnittstelle zunächst wx.login() aufrufen müssen, um den Code der aktuellen Sitzung des Benutzers zu erhalten. Warum müssen wir diese Schnittstelle serverseitig anfordern? Tatsächlich geschieht dies aus Sicherheitsgründen. Wenn wir diese Schnittstelle über eine Anfrage am Frontend aufrufen, müssen wir zwangsläufig die Appid unseres Miniprogramms und das Geheimnis des Miniprogramms nach außen preisgeben wird auch den vom WeChat-Server ausgegebenen Sitzungsschlüssel offenlegen. Dies birgt große Risiken für die Sicherheit unseres Unternehmens. Zusätzlich zum Erhalt des Sitzungsschlüssels auf der Serverseite müssen wir auch auf zwei Punkte achten: Sitzungsschlüssel entspricht eins zu eins dem von WeChat verteilten Code, und derselbe Code kann nur gegen Sitzungsschlüssel ausgetauscht werden einmal. Bei jedem Aufruf von wx.login() wird ein neuer Code und ein entsprechender Sitzungsschlüssel ausgegeben. Um die Benutzererfahrung und die Gültigkeit des Anmeldestatus sicherzustellen, müssen Entwickler wissen, dass sich der Benutzer erneut anmelden muss, bevor er wx aufruft .login()session_key ist ungültig. Auch wenn wx.login nicht aufgerufen wird, läuft session_key positiv mit der Häufigkeit der Benutzer ab, die das Miniprogramm verwenden nicht verfügbar für Entwickler und Benutzer. Die sogenannte Indirektion bedeutet, dass wir die Anmeldestatusinformationen des Benutzers selbst verwalten müssen. Dabei werden auch Sicherheitsfaktoren berücksichtigt. Wenn der vom WeChat-Server verteilte Sitzungsschlüssel direkt als Anmeldestatus der Geschäftspartei verwendet wird „Absichtliche Personen“, um die vertraulichen Informationen des Benutzers zu erhalten, wie z. B. wx.getUserInfo( ). Diese Schnittstelle erfordert session_key, um die vertraulichen Informationen von WeChat-Benutzern zu entschlüsseln. Was passiert also, wenn wir unsere eigene Login-Status-ID generieren? Hier können wir mehrere gängige irreversible Hash-Algorithmen wie md5, sha1 usw. verwenden, um die Login-Status-ID zu generieren (hier bezeichnen wir sie gemeinsam als). „skey“) wird an das Frontend zurückgegeben und die Anmeldestatuskennung wird am Frontend verwaltet (normalerweise im Speicher gespeichert). Auf der Serverseite speichern wir den generierten Schlüssel in der Datentabelle, die dem Benutzer entspricht, und das Frontend greift durch Übergabe des Schlüssels auf die Informationen des Benutzers zu.
Sie können sehen, dass wir den sha1-Algorithmus verwendet haben, um einen Schlüssel zu generieren:
wx.login({ success: function(loginRes) { if (loginRes.code) { // example: 081LXytJ1Xq1Y40sg3uJ1FWntJ1LXyth } } });
checkSession
前面我们将skey存入前端的storage里,每次进行用户数据请求时会带上skey,那么如果此时session_key过期呢?所以我们需要调用到wx.checkSession()这个API来校验当前session_key是否已经过期,这个API并不需要传入任何有关session_key的信息参数,而是微信小程序自己去调自己的服务来查询用户最近一次生成的session_key是否过期。如果当前session_key过期,就让用户来重新登录,更新session_key,并将最新的skey存入用户数据表中。
checkSession这个步骤呢,我们一般是放在小程序启动时就校验登录态的逻辑处,这里贴个校验登录态的流程图:
下面代码即校验登录态的简单流程:
let loginFlag = wx.getStorageSync(\'skey\'); if (loginFlag) { // 检查 session_key 是否过期 wx.checkSession({ // session_key 有效(未过期) success: function() { // 业务逻辑处理 }, // session_key 过期 fail: function() { // session_key过期,重新登录 doLogin(); } }); ) else { // 无skey,作为首次登录 doLogin(); }
推荐:《小程序开发教程》
Das obige ist der detaillierte Inhalt vonWie greift das Miniprogramm auf den WeChat-Anmeldestatus zu und verwaltet ihn?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!