欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

微信小程序?qū)崿F(xiàn)用戶登錄模塊服務(wù)器搭建

 更新時間:2021年05月06日 14:19:20   作者:流楚丶格念  
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)用戶登錄模塊服務(wù)器搭建,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

我選用的是node.js來搭建服務(wù)器,沒有安裝的小伙伴可以參考我的node.js其他博客。

服務(wù)器安裝與配置

初始化項目,將會自動創(chuàng)建package.json配置文件。

npm init -y

安裝Express框架和request模塊。

npm install express –save
npm install request --save

安裝nodemon監(jiān)控文件修改(如果已經(jīng)安裝則跳過此步)。

npm install nodemon -g

代碼編寫

執(zhí)行上述命令后,在項目目錄下創(chuàng)建app.js文件,編寫代碼如下:

引入Express框架和request模塊,配置appid和secret。

const express = require('express')
const bodyParser = require('body-parser')
const request = require('request')
const app = express()
app.use(bodyParser.json())
const wx = {
  appid: '', // 需要填寫開發(fā)者的AppID
  secret: '' // 需要填寫開發(fā)者的AppSecret
}

模擬數(shù)據(jù)庫。(在這就用數(shù)組形式,數(shù)據(jù)庫搭建比較繁瑣,在這不展示了,可以參考我博客中其他的node.js+mysql項目)

var db = { // 模擬數(shù)據(jù)庫
  session: {}, // 保存openid和session_key的會話信息
  user: {}  // 保存用戶記錄,如用戶名、積分等數(shù)據(jù)
}

請求登錄接口,校驗登錄憑證的微信接口URL地址。
(下面的url 是騰訊提供的測試 憑證的接口,不用修改)

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=authorization_code'  
  request(url, (err, response, body) => {
     if(){ // 此處代碼判斷session.openid是否存在}
     }
     res.json({token: token})
  })
})

判斷 session 中 openid 語句代碼。

if (session.openid) {
      var session = JSON.parse(body)
      // 用于生成token
      var token = 'token_' + new Date().getTime()
      db.session[token] = session 
}

設(shè)置訪問接口 3000

app.listen(3000, () => {
  console.log('server running at http://127.0.0.1:3000')
})

給大家整理了一下

因為這里的appid和session_key需要進行解密,所以要用到微信的WXBizDataCrypt函數(shù)
WXBizDataCrypt.js

var crypto = require('crypto')

function WXBizDataCrypt(appId, sessionKey) {
  this.appId = appId
  this.sessionKey = sessionKey
}

WXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) {
  // base64 decode
  var sessionKey = new Buffer(this.sessionKey, 'base64')
  encryptedData = new Buffer(encryptedData, 'base64')
  iv = new Buffer(iv, 'base64')

  try {
     // 解密
    var decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv)
    // 設(shè)置自動 padding 為 true,刪除填充補位
    decipher.setAutoPadding(true)
    var decoded = decipher.update(encryptedData, 'binary', 'utf8')
    decoded += decipher.final('utf8')
    
    decoded = JSON.parse(decoded)

  } catch (err) {
    throw new Error('Illegal Buffer')
  }

  if (decoded.watermark.appid !== this.appId) {
    throw new Error('Illegal Buffer')
  }

  return decoded
}

module.exports = WXBizDataCrypt

app.js全部代碼如下

// 加密解密
const crypto = require('crypto');
const WXBizDataCrypt = require('./WXBizDataCrypt')

const express = require('express')
const bodyParser = require('body-parser')
const request = require('request')
const app = express()
app.use(bodyParser.json())

const wx = {
    appid: '',
    secret: ''
}

var db = {
    session: {},
    user: {}
}

app.post('/login', (req, res) => {
    // 注意:小程序端的appid必須使用真實賬號,如果使用測試賬號,會出現(xiàn)login code錯誤
    console.log('login code: ' + 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'
    request(url, (err, response, body) => {
        console.log('session: ' + body)
        var session = JSON.parse(body)
        if(session.openid) {
            var token = 'token_' + new Date().getTime()
            db.session[token] = session
            if(!db.user[session.openid]) {
                db.user[session.openid] = {
                    credit: 100
                }
            }
        }
        res.json({
            token: token
        })
    })
})

app.get('/checklogin', (req, res) => {
    var session = db.session[req.query.token]
    console.log('checklogin: ', session)
    // 將用戶是否已經(jīng)登錄的布爾值返回給客戶端
    res.json({
        is_login: session !== undefined
    })
})

app.get('/credit', (req, res) => {
    var session = db.session[req.query.token]
    if(session && db.user[session.openid]) {
        res.json({
            credit: db.user[session.openid].credit
        })
    } else {
        res.json({
            err: '用戶不存在,或未登錄。'
        })
    }
})

app.post('/userinfo', (req, res) => {
    // 獲取session值
    var session = db.session[req.query.token]
    console.log('session:' + session)
    if(session) {
        // 使用appid和session_key解密encryptedData
        var pc = new WXBizDataCrypt(wx.appid, session.session_key)
        var data = pc.decryptData(req.body.encryptedData, req.body.iv)
        console.log('解密后:', data)
        // 校驗rawData是否正確通過
        var sha1 = crypto.createHash('sha1')
        sha1.update(req.body.rawData + session.session_key)
        var signature2 = sha1.digest('hex')
        console.log(signature2)
        console.log(req.body.signature)
        res.json({
            pass: signature2 === req.body.signature
        })
    } else {
        res.json({
            err: '用戶不存在,或未登錄。'
        })
    }
})

app.listen(3000, () => {
    console.log('server running at http://127.0.0.1:3000')
})

開啟服務(wù)器

保存上述代碼,打開控制臺或者Powershell或者Linux終端,運行下面語句即可打開服務(wù)器的3000 供服務(wù)器訪問。

nodemon app.js

到此這篇關(guān)于微信小程序?qū)崿F(xiàn)用戶登錄模塊服務(wù)器搭建的文章就介紹到這了,更多相關(guān)小程序登錄模塊服務(wù)器搭建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript中的函數(shù)重載深入理解

    JavaScript中的函數(shù)重載深入理解

    將函數(shù)名作為指向函數(shù)的指針,有助于理解為什么ECMAScript中沒有函數(shù)重載的概念,需要的朋友可以參考下
    2014-08-08
  • javascript實現(xiàn)倒計時跳轉(zhuǎn)頁面

    javascript實現(xiàn)倒計時跳轉(zhuǎn)頁面

    本文給大家介紹了如何使用javascript實現(xiàn)倒計時跳轉(zhuǎn)到其他頁面的方法以及實現(xiàn)原理,非常的簡單實用,有需要的小伙伴可以參考下。
    2016-01-01
  • Code:loadScript( )加載js的功能函數(shù)

    Code:loadScript( )加載js的功能函數(shù)

    Code:loadScript( )加載js的功能函數(shù)...
    2007-02-02
  • 微信小程序?qū)崿F(xiàn)用table顯示數(shù)據(jù)庫反饋的多條數(shù)據(jù)功能示例

    微信小程序?qū)崿F(xiàn)用table顯示數(shù)據(jù)庫反饋的多條數(shù)據(jù)功能示例

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)用table顯示數(shù)據(jù)庫反饋的多條數(shù)據(jù)功能,涉及微信小程序wx.request訪問php后臺及返回結(jié)果的顯示布局相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • js編寫輪播圖效果

    js編寫輪播圖效果

    這篇文章主要為大家詳細(xì)介紹了js編寫輪播圖效果的代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • js實現(xiàn)Select頭像選擇實時預(yù)覽代碼

    js實現(xiàn)Select頭像選擇實時預(yù)覽代碼

    這篇文章主要介紹了js實現(xiàn)Select頭像選擇實時預(yù)覽代碼,涉及javascript動態(tài)遍歷及設(shè)置select選項的技巧,非常簡單實用,需要的朋友可以參考下
    2015-08-08
  • 最新評論