Das WeChat-Applet implementiert den Serveraufbau des Benutzeranmeldemoduls

Das WeChat-Applet implementiert den Serveraufbau des Benutzeranmeldemoduls

Ich habe node.js zum Erstellen des Servers gewählt. Freunde, die es noch nicht installiert haben, können sich meine anderen node.js-Blogs ansehen.

Serverinstallation und -konfiguration

Initialisieren Sie das Projekt und die Konfigurationsdatei package.json wird automatisch erstellt.

npm init -y

Installieren Sie das Express-Framework und das Anforderungsmodul.

npm install express –speichern
npm Installationsanforderung --save

Installieren Sie nodemon, um Dateiänderungen zu überwachen (überspringen Sie diesen Schritt, wenn es bereits installiert ist).

npm installiere nodemon -g

Kodierung

Nachdem Sie den obigen Befehl ausgeführt haben, erstellen Sie die Datei app.js im Projektverzeichnis und schreiben Sie den folgenden Code:

Stellen Sie das Express-Framework und das Anforderungsmodul vor und konfigurieren Sie App-ID und Secret.

const express = erfordern('express')
const bodyParser = erfordern('body-parser')
const Anfrage = erforderlich('Anfrage')
const app = express()
app.verwenden(bodyParser.json())
Konstanten wx = {
  appid: '', // Sie müssen die AppID des Entwicklers eingeben
  secret: '' // Muss das AppSecret des Entwicklers eingeben
}

Simulieren Sie die Datenbank. (In diesem Fall verwenden wir ein Array. Die Datenbankeinrichtung ist ziemlich kompliziert und wird hier nicht gezeigt. Weitere node.js+mysql-Projekte finden Sie in meinem Blog.)

var db = { // simulierte Datenbanksitzung: {}, // Sitzungsinformationen von OpenID und Sitzungsschlüssel speichern Benutzer: {} // Benutzerdatensätze wie Benutzername, Punkte usw. speichern}

Fordern Sie die Anmeldeoberfläche an und überprüfen Sie die URL-Adresse der WeChat-Oberfläche der Anmeldeinformationen.
(Die folgende URL ist die von Tencent bereitgestellte Schnittstelle für Testanmeldeinformationen und muss nicht geändert werden.)

app.post('/login', (req, res) => {
  var url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' +
  wx.appid + '&secret=' + wx.secret + '&js_code=' + req.body.code +
   „&grant_type=Autorisierungscode“  
  Anfrage(URL, (Fehler, Antwort, Text) => {
     if(){ // Der Code hier bestimmt, ob session.openid existiert}
     }
     res.json({Token: Token})
  })
})

Bestimmen Sie den OpenID-Anweisungscode in der Sitzung.

wenn (Sitzung.openid) {
      var Sitzung = JSON.parse(Body)
      // Wird zum Generieren von Token verwendet
      var token = 'token_' + neues Date().getTime()
      db.session[token] = Sitzung 
}

Zugangsschnittstelle 3000 einstellen

app.listen(3000, () => {
  console.log('Server läuft unter http://127.0.0.1:3000')
})

Ich habe es für dich geklärt

Da die App-ID und der Sitzungsschlüssel hier entschlüsselt werden müssen, wird die WXBizDataCrypt-Funktion von WeChat verwendet
WXBizDataCrypt.js

var Krypto = erforderlich('Krypto')

Funktion WXBizDataCrypt(Anwendungs-ID, Sitzungsschlüssel) {
  this.appId = Anwendungs-ID
  this.sessionKey = Sitzungsschlüssel
}

WXBizDataCrypt.prototype.decryptData = Funktion (verschlüsselteDaten, iv) {
  // Base64-Dekodierung
  var sessionKey = neuer Puffer(dieser.sessionKey, 'base64')
  verschlüsselteDaten = neuer Puffer(verschlüsselteDaten, 'base64')
  iv = neuer Puffer(iv, 'base64')

  versuchen {
     // Entschlüsselung var decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv)
    // Automatisches Padding auf „true“ setzen und Padding löschen decipher.setAutoPadding(true)
    var dekodiert = decipher.update(verschlüsselteDaten, 'binär', 'utf8')
    dekodiert += decipher.final('utf8')
    
    dekodiert = JSON.parse(dekodiert)

  } fangen (Fehler) {
    wirf einen neuen Fehler('Unzulässiger Puffer')
  }

  wenn (dekodiertes Wasserzeichen.App-ID !== diese.App-ID) {
    wirf einen neuen Fehler('Unzulässiger Puffer')
  }

  Rückgabe dekodiert
}

module.exports = WXBizDataCrypt

Der gesamte Code von app.js lautet wie folgt

// Verschlüsselung und Entschlüsselung const crypto = require('crypto');
const WXBizDataCrypt = erfordern('./WXBizDataCrypt')

const express = erfordern('express')
const bodyParser = erfordern('body-parser')
const Anfrage = erforderlich('Anfrage')
const app = express()
app.verwenden(bodyParser.json())

Konstanten wx = {
    Anwendungs-ID: '',
    Geheimnis: ''
}

var db = {
    Sitzung: {},
    Benutzer: {}
}

app.post('/login', (req, res) => {
    // Hinweis: Die App-ID auf der Miniprogrammseite muss ein echtes Konto verwenden. Wenn ein Testkonto verwendet wird, tritt ein Anmeldecodefehler auf console.log('Anmeldecode: ' + req.body.code)
    var url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + wx.appid + '&secret=' + wx.secret + '&js_code=' + req.body.code + '&grant_type=authorization_code'
    Anfrage(URL, (Fehler, Antwort, Text) => {
        console.log('Sitzung: ' + Text)
        var Sitzung = JSON.parse(Body)
        wenn(Sitzung.openid) {
            var token = 'token_' + neues Date().getTime()
            db.session[token] = Sitzung
            wenn(!db.user[session.openid]) {
                db.Benutzer[Sitzung.openid] = {
                    Kredit: 100
                }
            }
        }
        res.json({
            Zeichen: Zeichen
        })
    })
})

app.get('/checklogin', (req, res) => {
    var Sitzung = db.session[Anforderung.Abfrage.Token]
    console.log('checklogin: ', Sitzung)
    // Gibt den Booleschen Wert zurück, der angibt, ob der Benutzer beim Client angemeldet ist res.json({
        is_login:session !== undefiniert
    })
})

app.get('/Kredit', (req, res) => {
    var Sitzung = db.session[Anforderung.Abfrage.Token]
    wenn(Sitzung && db.Benutzer[Sitzung.openid]) {
        res.json({
            Guthaben: db.user[session.openid].credit
        })
    } anders {
        res.json({
            err: ,,Der Benutzer existiert nicht oder ist nicht angemeldet. '
        })
    }
})

app.post('/Benutzerinfo', (req, res) => {
    // Den Sitzungswert abrufen var session = db.session[req.query.token]
    console.log('Sitzung:' + Sitzung)
    wenn(Sitzung) {
        // Verschlüsselte Daten mit App-ID und Sitzungsschlüssel entschlüsseln
        var pc = neues WXBizDataCrypt(wx.appid, session.session_key)
        var Daten = pc.decryptData(req.body.encryptedData, req.body.iv)
        console.log('Nach der Entschlüsselung:', Daten)
        // Überprüfen Sie, ob die Rohdaten korrekt sind. var sha1 = crypto.createHash('sha1')
        sha1.update(req.body.rawData + session.session_key)
        var signature2 = sha1.digest('hex')
        console.log(Signatur2)
        Konsole.log(erforderlich.Body.Signatur)
        res.json({
            Pass: Signatur2 === req.body.signature
        })
    } anders {
        res.json({
            err: ,,Der Benutzer existiert nicht oder ist nicht angemeldet. '
        })
    }
})

app.listen(3000, () => {
    console.log('Server läuft unter http://127.0.0.1:3000')
})

Starten Sie den Server

Speichern Sie den obigen Code, öffnen Sie die Konsole oder das Powershell- oder Linux-Terminal und führen Sie die folgende Anweisung aus, um die Servernummer 3000 für den Serverzugriff zu öffnen.

nodemon app.js

Dies ist das Ende dieses Artikels zum Erstellen eines Servers für das Benutzeranmeldemodul des WeChat Mini-Programms. Weitere Informationen zum Erstellen eines Servers für das Anmeldemodul des WeChat Mini-Programms finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Aufbau des WeChat-Applets und Lösung für das Problem fehlgeschlagener Anmeldungen
  • Das WeChat-Applet erstellt seinen eigenen HTTPS-Server
  • So erstellen Sie lokal einen WeChat-Applet-Server
  • Tutorial zum Erstellen eines WeChat-Applets für den Zugriff auf den Node.js-Schnittstellenserver

<<:  Docker-Lernen: Die spezifische Verwendung von Container-Containern

>>:  Detaillierte Erläuterung von 30 SQL-Abfrageoptimierungstechniken für MySQL-Zehnmillionen großer Datenmengen

Artikel empfehlen

Implementierung von webpack-dev-server zum Erstellen eines lokalen Servers

Inhaltsverzeichnis Vorwort Webpack-Deb-Server Sta...

So importieren Sie Excel-Dateien in eine MySQL-Datenbank

In diesem Artikel erfahren Sie, wie Sie Excel-Dat...

Gedanken zu copy_{to, from}_user() im Linux-Kernel

Inhaltsverzeichnis 1. Was ist copy_{to,from}_user...

Beispielanalyse der Listen-Direktive in Nginx

Handlungsüberblick Im vorherigen Artikel haben wi...

Überlegungen zum Rasterdesign von Webseiten

<br />Ursprüngliche Adresse: http://andymao....

4 Möglichkeiten zum Anzeigen von Prozessen in LINUX (Zusammenfassung)

Ein Prozess ist ein Programmcode, der in der CPU ...

So melden Sie sich unter Shell schnell ohne Kennwort bei der MySQL-Datenbank an

Hintergrund Wenn wir uns über den MySQL-Client in...

Implementierungsbeispiel für die Message Board-Funktion von Node.js+Express

Inhaltsverzeichnis Nachrichtenbrett Erforderliche...

Tutorial zum Erstellen eines CA-Zertifikats unter Linux Centos8

Installieren der erforderlichen Dateien Yum insta...

Join-Operation in MySQL

Arten von Verknüpfungen 1. Innerer Join: Die Feld...