真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

小程序開發(fā)怎么實(shí)現(xiàn)token統(tǒng)一管理

這篇文章主要講解了“小程序開發(fā)怎么實(shí)現(xiàn)token統(tǒng)一管理”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“小程序開發(fā)怎么實(shí)現(xiàn)token統(tǒng)一管理”吧!

目前創(chuàng)新互聯(lián)公司已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、杭錦后網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

TOKEN 定時(shí)刷新器

一、背景

對(duì)于使用過公眾平臺(tái)的API功能的開發(fā)者來說,access_token絕對(duì)不會(huì)陌生,它就像一個(gè)打開家門的鑰匙,只要拿著它,就能使用公眾平臺(tái)絕大部分的API功能。因此,對(duì)于開發(fā)者而言,access_token的使用方式就變得尤其的重要。在日常API接口的運(yùn)營中,經(jīng)常遇到各種的疑問:為什么我的access_token突然非法了?為什么剛剛拿到的access_token,用了10min就過期了?對(duì)于這些疑問,我們提供出access_token的設(shè)計(jì)方案,便于開發(fā)者對(duì)access_token使用方式上的理解。

二、access_token的內(nèi)部設(shè)計(jì)

2.1 access_token的時(shí)效性

眾所周知,access_token是通過appid和appsecret來生成的。內(nèi)部設(shè)計(jì)的步驟如下:

(1)開發(fā)者通過https請求方式: GET https://API.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET,傳入appid及apppsecret的參數(shù)

(2)公眾平臺(tái)后臺(tái)會(huì)校驗(yàn)appid和哈希(appsecret)是否與存儲(chǔ)匹配,若匹配,結(jié)合當(dāng)前時(shí)間戳,生成新的access_token。

(3)生成新的access_token的同時(shí),會(huì)對(duì)老的access_token的過期時(shí)間戳更新為當(dāng)前時(shí)間戳。

(4)返回新的access_token給開發(fā)者。

這里以圖示的方式說明一下,新舊token交替過程:

小程序開發(fā)怎么實(shí)現(xiàn)token統(tǒng)一管理

從上圖需要注意的幾點(diǎn):

(1)公眾平臺(tái)存儲(chǔ)層只會(huì)存儲(chǔ)新老兩個(gè)access_token,意味著假設(shè)開發(fā)者重復(fù)調(diào)用3次接口,則會(huì)導(dǎo)致最早的access_token立刻失效。

(2)雖然請求新的access_token后,老的access_token過期時(shí)間會(huì)更新為當(dāng)前時(shí)間,但也不會(huì)立刻失效,原理請參考 【2.2 access_token 的逐漸失效性】

(3)出于信息安全考慮,公眾平臺(tái)并不會(huì)明文存儲(chǔ)appsecret,僅存儲(chǔ)appid以及appsecret的哈希值。因此開發(fā)者要妥善保管appsecret。當(dāng)appsecret疑似泄露時(shí),需要及時(shí)登錄mp.weixin.qq.com重置appsecret。

2.2 access_token 的逐漸失效性

從【access_token的時(shí)效性】了解到,當(dāng)開發(fā)者請求獲取新的access_token時(shí),老的access_token過期時(shí)間會(huì)被更新為當(dāng)前時(shí)間,但此時(shí)不會(huì)立刻失效,因?yàn)楣娖脚_(tái)會(huì)提供【5分鐘的新老access_token交替緩沖時(shí)間】,因此也稱為access_token

的逐漸失效性。

實(shí)現(xiàn)的原理是:

  • 由于老的access_token過期時(shí)間戳已被刷新,所以在API接口請求期間,帶上的access_token解開后,過期時(shí)間戳?xí)由?分鐘,然后和當(dāng)前設(shè)備時(shí)間進(jìn)行比對(duì),若超過當(dāng)前設(shè)備時(shí)間,判斷為失效。

  • 公眾平臺(tái)的設(shè)備會(huì)保持時(shí)鐘同步,但設(shè)備之間仍然可能會(huì)存在1-2分鐘的時(shí)間差異,所以【5分鐘】并非絕對(duì)的時(shí)間值。當(dāng)開發(fā)者獲取到新的access_token后應(yīng)該盡快切換到新的access_token。

小程序開發(fā)怎么實(shí)現(xiàn)token統(tǒng)一管理

從上圖需要注意的幾點(diǎn):

(1)由于存在設(shè)備時(shí)間同步的差異,可能會(huì)導(dǎo)致開發(fā)者遇到拿著老的access_token請求API接口,部分請求成功,部分請求失敗的情況,建議開發(fā)者獲取到新的access_token后盡快使用。

(2)通過理解兩個(gè)圖示,對(duì)開發(fā)者來說,access_token是相當(dāng)關(guān)鍵且不能亂調(diào)的接口,建議開發(fā)者統(tǒng)一管理access_token,以免造成多次請求導(dǎo)致access_token失效。

三、access_token的統(tǒng)一管理

access_token的更新交給定時(shí)觸發(fā)器完成所有用到access_token的接口調(diào)用,不傳入access_token,交由后端從數(shù)據(jù)庫中讀取

下面以小程序云函數(shù)端統(tǒng)一管理access_token代碼為例展示

index.js 請求并更新access_token

如果在其他端,需要傳入APPID

const cloud = require("wx-server-sdk")
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
const timeutil = require("./timeutil");
// 需要修改的配置項(xiàng)
const APPSECRET =  ""
const axios = require("axios");
const db = cloud.database();
// 定時(shí)刷新獲取配置信息
const CONFIG = "cloud-token";
// 獲取TOKEN
const URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={APPID}&secret={APPSECRET}"
function getAccessToken(APPID,APPSECRET){
  let url = URL;
  url = url.replace("{APPID}",APPID)
  url = url.replace("{APPSECRET}",APPSECRET)
  return new Promise(function(resolve,reject){
    axios.get(url).then(function (response) {
      console.log(response);
      resolve(response)
    })
    .catch(function (error) {
      console.log(error);
      reject(error)
    });
  })
}
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  // 自動(dòng)獲取當(dāng)前應(yīng)用APPID
  var APPID = wxContext.APPID;
  return new Promise(function(resolve,reject){
    getAccessToken(APPID,APPSECRET).then(async res=>{
      console.log(res)
      let access_token = res.data.access_token;
      let ans =  await db.collection(CONFIG).doc("access_token").set({
        data:{
          value:access_token,
          _updateTime:timeutil.TimeCode()
        }
      })
      resolve(ans)
    })
  }) 
}

config.json 定時(shí)觸發(fā)器

每小時(shí)觸發(fā)一次

{
  "triggers": [
    {
      "name": "myTrigger",
      "type": "timer",
      "config": "0 0 * * * * *"
    }
  ]
}

timeutil.js 時(shí)間工具類

function TimeCode() {
  var date = new Date();
  var year = date.getFullYear()
  var month = date.getMonth() + 1
  var day = date.getDate()

  var hour = date.getHours()
  var minute = date.getMinutes()
  var second = date.getSeconds()

  return [year, month, day].map(formatNumber).join("-") + " " + [hour, minute, second].map(formatNumber).join(":")
}
//獲取日期
function _formatTime(time) {
  var date = time.getFullYear() + "年" + time.getMonth() + "月" + time.getDate() + "日"
  var ftime = time.getHours() + "時(shí)" + time.getMinutes() + "分" + time.getSeconds() + "秒"
  return date + ftime;
}
function TimeCodeYmd(){
  var date = new Date();
  var year = date.getFullYear()
  var month = date.getMonth() + 1
  var day = date.getDate()

  return [year, month, day].map(formatNumber).join("-");
}
function formatNumber(n) {
  n = n.toString()
  return n[1] ? n : "0" + n
}
module.exports={
  TimeCode,
  TimeCodeYmd
}

其他云函數(shù)中使用到access_token的地方,通過查詢數(shù)據(jù)庫進(jìn)行獲取,二者通過數(shù)據(jù)庫進(jìn)行邏輯耦合。

access_token 查詢使用

const TOKEN = "cloud-token";
//獲取access_token 
  try {
    let tres = await db.collection(TOKEN).doc("access_token").get();
    access_token = tres.data.value;
    console.log(access_token)
  } catch (error) {
    console.log("--無token記錄--")
    return {
      errCode:-1,
      errMsg:"數(shù)據(jù)庫中無TOKEN信息"
    }
  }

感謝各位的閱讀,以上就是“小程序開發(fā)怎么實(shí)現(xiàn)token統(tǒng)一管理”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)小程序開發(fā)怎么實(shí)現(xiàn)token統(tǒng)一管理這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


網(wǎng)站標(biāo)題:小程序開發(fā)怎么實(shí)現(xiàn)token統(tǒng)一管理
網(wǎng)頁地址:http://weahome.cn/article/jpodgc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部