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

簡單了解小程序+node梳理登陸流程

 更新時間:2019年06月24日 10:27:32   作者:三只萌新  
這篇文章主要介紹了簡單了解小程序+node梳理登陸流程,以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下

希望通過小程序+node來整體的了解下小程序登陸的流程。如有不對歡迎在評論區(qū)指出

1. client: wx.login()

wx.login({
success: ([code]) => {
// 發(fā)送 code 到后臺換取 openId, sessionKey, unionId
}
})

2. service: request()

服務(wù)端請求,需要的參數(shù)(js_code:client傳的code;appid:小程序唯一標(biāo)識申請賬號時拿到;secret:小程序密鑰申請賬號時拿到;grant_type:默認(rèn)值為 authorization_code)

// 請求方法
const request = require('request')
const url = https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
module.exports = {
async getSession(code) {
return new Promise((resolve, reject) => {
request(url,{
method: 'GET',
json: true
},
(error, res, body) => {
if (error) {
reject(error)
} else {
if (body.errcode) {
reject(new Error(body.errmsg))
} else {
resolve(body)
}
}
}
)
})
}
}

3.service:加密解密處理

const crypto = require('crypto')
const secret = '2019_06'
const algorithm = 'aes-256-cbc'
function encode(id) {
const encoder = crypto.createCipher(algorithm, secret)
const str = [id, Date.now(), '2019'].join('|')
let encrypted = encoder.update(str, 'utf8', 'hex')
encrypted += encoder.final('hex')
return encrypted
}
function decode(str) {
const decoder = crypto.createDecipher(algorithm, secret)
let decoded = decoder.update(str, 'hex', 'utf8')
decoded += decoder.final('utf8')
const arr = decoded.split('|')
return {
id: arr[0],
timespan: parseInt(arr[1])
}
}
module.exports = {
encode,
decode
}

4.service:返回登陸態(tài)

const { encode } = require('./lib/crypto')
const jsonMine = 'application/json'
const now = Date.now()
function handle(ctx, data, code = 0, message = 'success') {
ctx.type = jsonMine
ctx.body = {
code,
data,
message
}
}
router.get('/login', async (ctx, next) => {
const { code } = ctx.request.query
const session = await login(code)
if (session) {
const { session_key, openid } = session
// 查找數(shù)據(jù)庫中是否已經(jīng)存有openid,如果 hasOpenid 為null說明是新用戶
const hasOpenid = await User.findByPk(openid)
if(!hasOpenid){
// 數(shù)據(jù)庫存儲openid,時間戳
User.create({openid,timespan:Date.now()})
}
handle(ctx, { token: encode(openid) })
} else {
throw new Error('登陸失敗')
}
})

5.client:存儲登陸態(tài)在storage

import { LOGIN_TOKEN } from '../../utils/localStorage'
// 拿到token存儲到客戶端
wx.setStorageSync(LOGIN_TOKEN, token)

我在發(fā)起請求時將登陸態(tài)放在請求頭中,相應(yīng)的服務(wù)端可以從請求頭中獲取

header: {
'x-session': wx.getStorageSync(LOGIN_TOKEN)
},

6.service:校驗登陸態(tài)

module.exports = async function(ctx, next) {
const sessionKey = ctx.get('x-session')
const { id, timespan } = decode(sessionKey)
// 查找數(shù)據(jù)庫中是否存在該 openid,返回是一個數(shù)組,如果不存在則返回[]
const targetList = await getOpenid(id)
if (targetList.length > 0) {
// 如果超過設(shè)定的過期時間,標(biāo)記isExpired字段為登陸過期
const oneHour = 1000 * 60 * 60 * 24
if (Date.now() - timespan > oneHour) {
ctx.state.isExpired = true
// 跟前臺約定,如果code=2說明登陸過期跳登陸頁面
handle(ctx, '', 2, '登陸過期')
} else {
handle(ctx, '', 0, '登陸成功')
}
} else {
// 通過ctx.throw可以直接拋出錯誤
ctx.throw(401, '登陸失敗')
}

整體流程圖

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,

相關(guān)文章

  • Node.js包管理器npm的具體使用

    Node.js包管理器npm的具體使用

    Node.js安裝包中都帶有一個重要的工具 包管理器npm,本文主要介紹了Node.js包管理器npm的具體使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 開箱即用的Node.js+Mysql模塊封裝實現(xiàn)詳解

    開箱即用的Node.js+Mysql模塊封裝實現(xiàn)詳解

    這篇文章主要為大家介紹了開箱即用的Node.js+Mysql模塊封裝實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Nodejs讀取文件時相對路徑的正確寫法(使用fs模塊)

    Nodejs讀取文件時相對路徑的正確寫法(使用fs模塊)

    本篇文章主要介紹了linux 環(huán)境 mysql寫入中文報錯的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • nodejs如何將多個目錄文件合并成一個

    nodejs如何將多個目錄文件合并成一個

    這篇文章主要介紹了nodejs如何將多個目錄文件合并成一個問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 淺談Node.js 中間件模式

    淺談Node.js 中間件模式

    中間件在 Node.js 中被廣泛使用,它泛指一種特定的設(shè)計模式、一系列的處理單元、過濾器和處理程序,以函數(shù)的形式存在,這篇文章主要介紹了淺談Node.js 中間件模式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Node中解決接口跨域問題詳解

    Node中解決接口跨域問題詳解

    在 Node 中編寫接口時,我們常常會遇到跨域問題,通過本篇文章,我們來聊聊如何解決 Node 中接口的跨域問題,文中代碼示例介紹了非常詳細(xì),需要的朋友可以借鑒一下
    2023-04-04
  • nodejs使用Express框架寫后端接口的全過程

    nodejs使用Express框架寫后端接口的全過程

    最近學(xué)習(xí)了基于前后端分離的開發(fā)模式,我前端使用Vue框架,后端使用nodejs開發(fā)API接口,下面這篇文章主要給大家介紹了關(guān)于nodejs使用Express框架寫后端接口的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Node.js獲取本機Mac地址的兩種方案

    Node.js獲取本機Mac地址的兩種方案

    有時候我們的項目中可能會有日志記錄的功能或者其他需要ip的功能,于是這時我們需要獲取用戶的ip地址或mac地址,下面這篇文章主要給大家介紹了關(guān)于Node.js獲取本機Mac地址的兩種方案,需要的朋友可以參考下
    2022-09-09
  • Node.js?模塊的加載邏輯你了解嘛

    Node.js?模塊的加載邏輯你了解嘛

    這篇文章主要為大家介紹了Node.js?模塊的加載邏輯,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Node.js中Request模塊處理HTTP協(xié)議請求的基本使用教程

    Node.js中Request模塊處理HTTP協(xié)議請求的基本使用教程

    這篇文章主要介紹了Node.js中Request模塊處理HTTP請求的基本使用教程,request也支持OAuth的簽名請求,很好很強大,需要的朋友可以參考下
    2016-03-03

最新評論