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

微信用戶訪問小程序的登錄過程詳解

 更新時間:2019年09月20日 11:53:47   作者:Sam哥哥  
這篇文章主要介紹了微信用戶訪問小程序的登錄過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

概述

當(dāng)你開發(fā)完了一個小程序并部署上線后,某個微信用戶第一次訪問這個小程序的時候,會彈出一個授權(quán)界面,用戶可以選擇是否使用微信登錄,如果選擇是,則直接進(jìn)入到小程序。當(dāng)你第二次進(jìn)入該小程序的時候,你會發(fā)現(xiàn)授權(quán)界面不會彈出來了,直接就進(jìn)入小程序了。

這個過程看起來非常的簡單,但其實(shí)實(shí)現(xiàn)起來相當(dāng)?shù)穆闊┖头爆?。涉及到會話、安全、?yàn)證等各種各樣的問題。下面筆者介紹一下實(shí)現(xiàn)這個登錄過程的思路。

微信提供小程序登錄流程圖

這里寫圖片描述

我們可以從登錄流程時序 找到這張圖。想完全看懂張圖,需要了解很多東西。我們先來看看微信提供的幾個接口。

小程序接口介紹

wx.login()

這個方法是小程序端發(fā)起的,如果是使用騰訊團(tuán)隊(duì)推出的小程序組件化開發(fā)框架的wepy的話,偽代碼如下:

wepy.login()
   .then(res => {
   const code = res.code
 })

這樣子就可以從微信平臺獲取一個code,這個code是臨時登錄憑證,用于獲取openid的。

wx.request()

這個也是小程序端發(fā)起的,用于請求開發(fā)者服務(wù)器(也即是我們的應(yīng)用服務(wù)器)上的接口,調(diào)用的偽代碼如下:

 wepy.request({
     url: `xxurl`,
     data: {
     //入?yún)?
     },
    })
    .then(res => {
     //從res中獲取應(yīng)用服務(wù)器返回的數(shù)據(jù)
    })

獲取openid的接口

當(dāng)某個開發(fā)主體開發(fā)了一個小程序后,當(dāng)用戶訪問這個小程序的時候,微信平臺會為這個用戶分配一個openid。如下接口:

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

這個微信接口一般是我們的應(yīng)用服務(wù)器發(fā)起調(diào)用的,而不是小程序端發(fā)起的。

wx.getUserInfo

getUserInfo這個接口用于在微信平臺獲取用戶信息。注意,如果微信用戶第一次訪問小程序,是彈出一個授權(quán)界面的。當(dāng)用戶授權(quán)后,getUserInfo才能調(diào)用并返回用戶數(shù)據(jù)。

這個四個接口在使用微信訪問小程序的時候都會用到的。

基于token保持會話和登錄認(rèn)證

小程序雖然不支持cookie的機(jī)制,但是支持在header里設(shè)置token。

這個token是應(yīng)用服務(wù)器生成的。

header: {
    'xxxxtoken': token,
 }

當(dāng)小程序調(diào)用應(yīng)用服務(wù)器接口的時候,必須帶上這個token,應(yīng)用服務(wù)端則對這個token進(jìn)行解析和認(rèn)證。當(dāng)然如果是第一次訪問小程序,只能由應(yīng)用服務(wù)器先生成token。 筆者打算用偽代碼來表達(dá)使用token后,整個登錄的過程,因?yàn)橛梦淖只蛘邎D比較難表達(dá)。

const code = wx.login();
if (code ) {//code存在
//從小程序的本地中獲取toten
const token = wx.getStorageSync('xxxxxtoken')
   if (token ) {//小程序本地存有token,無需彈出授權(quán)界面
    //直接傳入code字段,調(diào)用應(yīng)用服務(wù)器的驗(yàn)證token的方法,如果校驗(yàn)成功,需要返回用戶信息。
    const userinfo = wx.request(http://xxxxxValidateToken(code ));
    if (userinfo) {
      //說明登錄成功,直接進(jìn)入小程序的主界面。
    }
   }
   else {
    //說明小程序本地沒有token,這個時候需要彈出授權(quán)界面,讓微信用戶決定是否訪問小程序,如果用戶選擇是的話。
    const weixinuserinfo = wx.getUserInfo();//會彈出授權(quán)界面,微信提供的
    if (weixinuserinfo ){
      //生成或者驗(yàn)證token
      const userinfo = wx.request(http://xxxxxValidateToken(code ));

     const token = userinfo.getToken();
     //將token存儲到小程序本地
     wx.setStorageSync('xxxxxtoken', token )
    }
   }    
}

上面的偽代碼中,會調(diào)用應(yīng)用服務(wù)器(我們的應(yīng)用服務(wù)器)的

http://xxxxxValidateToken(code )

方法。這個方法的實(shí)現(xiàn)邏輯大概如下:

1、先驗(yàn)證這個微信用戶是否存在,可以調(diào)用微信提供的jscode2session方法,該方法會返回一個openid。我們必須在業(yè)務(wù)代碼里,將這個openid保存到數(shù)據(jù)庫,并和userid關(guān)聯(lián)起來。

2、判斷是否是新的用戶,如果是,則生成token和生成新的一個用戶信息存儲到數(shù)據(jù)庫。如果不是新的用戶,則驗(yàn)證token。

這個流程走完后,小程序就可以通過wx.request方法,帶上token,真正的訪問應(yīng)用服務(wù)器的業(yè)務(wù)方法,獲取業(yè)務(wù)數(shù)據(jù)。

token的生成和校驗(yàn)

見過有些公司是直接將userid和openid,加密后返回給小程序。也見過用userid和password加密后返回給小程序。如果是選擇第二種方式的話,驗(yàn)證token的邏輯大概如下:

先解密,獲取userid和password,并根據(jù)userid從數(shù)據(jù)庫中獲取到用戶密碼,跟從token中解密出來的password進(jìn)行比對,如果相等,則校驗(yàn)通過。

總結(jié)

現(xiàn)在再回頭看看微信提供登錄路程圖,是否好理解一些了。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • js重寫方法的簡單實(shí)現(xiàn)

    js重寫方法的簡單實(shí)現(xiàn)

    下面小編就為大家?guī)硪黄猨s重寫方法的簡單實(shí)現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • 根據(jù)服務(wù)器時間作為起始,顯示時鐘的小程序

    根據(jù)服務(wù)器時間作為起始,顯示時鐘的小程序

    一般的網(wǎng)頁都有這種功能:在頁面上動態(tài)顯示當(dāng)前時間,這個的實(shí)現(xiàn)也很簡單,基本上一行代碼就實(shí)現(xiàn)了
    2009-06-06
  • 深入探討javascript函數(shù)式編程

    深入探討javascript函數(shù)式編程

    在函數(shù)式編程中,函數(shù)被看做是“一等公民”。JavaScript可以通過巧妙地函數(shù)組合來構(gòu)建抽象,通過內(nèi)嵌函數(shù)的方式,在軟件開發(fā)的過程中,我們可以把更多的精力放在“函數(shù)要做什么”上,而不用太關(guān)心“函數(shù)如何做”的問題。
    2015-10-10
  • 必備的JS調(diào)試技巧匯總

    必備的JS調(diào)試技巧匯總

    試想一下:出現(xiàn)了某個bug,有人用幾分鐘就搞定了,有人用了半天或者一天都找不到原因所在。你愿意當(dāng)前者還是后者呢?想當(dāng)前者的就請好好看完本篇文章吧。文中涉及較多Gif演示動畫請注意。
    2016-07-07
  • 小程序api實(shí)現(xiàn)promise封裝過程解析

    小程序api實(shí)現(xiàn)promise封裝過程解析

    這篇文章主要介紹了小程序api實(shí)現(xiàn)promise封裝過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Javascript類型轉(zhuǎn)換的規(guī)則實(shí)例解析

    Javascript類型轉(zhuǎn)換的規(guī)則實(shí)例解析

    這篇文章主要介紹了Javascript類型轉(zhuǎn)換的規(guī)則實(shí)例解析,涉及到j(luò)avascript類型轉(zhuǎn)換相關(guān)知識,對本文感興趣的朋友一起學(xué)習(xí)吧
    2016-02-02
  • JS修改地址欄參數(shù)實(shí)例代碼

    JS修改地址欄參數(shù)實(shí)例代碼

    本文給大家介紹js修改地址欄參數(shù)的實(shí)例代碼,并給大家附上用JS動態(tài)改變地址欄內(nèi)容 window.location.href window.location.hash的方法,比較實(shí)用,需要的朋友參考下吧
    2016-06-06
  • JavaScript實(shí)現(xiàn)簡單的隱藏式側(cè)邊欄功能示例

    JavaScript實(shí)現(xiàn)簡單的隱藏式側(cè)邊欄功能示例

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)簡單的隱藏式側(cè)邊欄功能,涉及javascript結(jié)合定時器針對頁面元素屬性動態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-08-08
  • JS中的算法與數(shù)據(jù)結(jié)構(gòu)之二叉查找樹(Binary Sort Tree)實(shí)例詳解

    JS中的算法與數(shù)據(jù)結(jié)構(gòu)之二叉查找樹(Binary Sort Tree)實(shí)例詳解

    這篇文章主要介紹了JS中的算法與數(shù)據(jù)結(jié)構(gòu)之二叉查找樹(Binary Sort Tree),結(jié)合實(shí)例形式詳細(xì)分析了二叉查找樹(Binary Sort Tree)的原理、定義、遍歷、查找、插入、刪除等常見操作技巧,需要的朋友可以參考下
    2019-08-08
  • js對象數(shù)組查找某一元素的各種方法(不改變原數(shù)組)

    js對象數(shù)組查找某一元素的各種方法(不改變原數(shù)組)

    前端經(jīng)常要通過javaScript來處理數(shù)組中的數(shù)據(jù),其中就包括檢查數(shù)組中是否包含滿足特定搜索條件的單個或者多個值,這篇文章主要給大家介紹了關(guān)于js對象數(shù)組查找某一元素的各種方法,文中介紹的方法不改變原數(shù)組,需要的朋友可以參考下
    2024-06-06

最新評論