最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

概述

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

這個過程看起來非常的簡單,但其實實現起來相當的麻煩和繁瑣。涉及到會話、安全、驗證等各種各樣的問題。下面筆者介紹一下實現這個登錄過程的思路。

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

這里寫圖片描述

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

小程序接口介紹

wx.login()

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

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

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

wx.request()

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

 wepy.request({
     url: `xxurl`,
     data: {
     //入參
     },
    })
    .then(res => {
     //從res中獲取應用服務器返回的數據
    })

獲取openid的接口

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

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

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

wx.getUserInfo

getUserInfo這個接口用于在微信平臺獲取用戶信息。注意,如果微信用戶第一次訪問小程序,是彈出一個授權界面的。當用戶授權后,getUserInfo才能調用并返回用戶數據。

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

基于token保持會話和登錄認證

小程序雖然不支持cookie的機制,但是支持在header里設置token。

這個token是應用服務器生成的。

header: {
    'xxxxtoken': token,
 }

當小程序調用應用服務器接口的時候,必須帶上這個token,應用服務端則對這個token進行解析和認證。當然如果是第一次訪問小程序,只能由應用服務器先生成token。 筆者打算用偽代碼來表達使用token后,整個登錄的過程,因為用文字或者圖比較難表達。

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

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

上面的偽代碼中,會調用應用服務器(我們的應用服務器)的

http://xxxxxValidateToken(code )

方法。這個方法的實現邏輯大概如下:

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

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

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

token的生成和校驗

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

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

總結

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • js獲取元素的外鏈樣式的簡單實現方法

    js獲取元素的外鏈樣式的簡單實現方法

    下面小編就為大家?guī)硪黄猨s獲取元素的外鏈樣式的簡單實現方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • 使用 bootstrap modal遇到的問題小結

    使用 bootstrap modal遇到的問題小結

    bootstrap提供了一個寫好的css文件和js文件然而在使用時遇到了一下并不是很好的問題,今天在使用彈出對話框時遇到了一個這樣的問題,今天小編給大家分享下使用 bootstrap modal遇到的問題小結,一起看看吧
    2016-11-11
  • 移動端a標簽下載文件重命名(download)不生效解決辦法

    移動端a標簽下載文件重命名(download)不生效解決辦法

    在移動端使用a標簽下載文件時,文件重命名可能不生效,尤其是在APP內嵌頁面中,這通常是因為跨域問題導致的,文中將解決辦法介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • JavaScript字符串操作的四個實用技巧

    JavaScript字符串操作的四個實用技巧

    在制作前端頁面的過程中,經常需要用到JavaScript進行邏輯處理,很多時候都需要對字符串進行操作,這篇文章主要給大家介紹了關于JavaScript字符串操作的四個實用技巧,需要的朋友可以參考下
    2021-07-07
  • 遍歷js中對象的屬性和值的實例

    遍歷js中對象的屬性和值的實例

    下面小編就為大家?guī)硪黄闅vjs中對象的屬性和值的實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • 詳解JS獲取HTML DOM元素的8種方法

    詳解JS獲取HTML DOM元素的8種方法

    本篇文章主要介紹了詳解JS獲取HTML DOM元素的8種方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • js 省地市級聯選擇

    js 省地市級聯選擇

    3級省地市級聯菜單,ie/ff 測試通過,支持多個并存,支持事件
    2010-02-02
  • JavaScript?WebSocket實現實時雙向聊天

    JavaScript?WebSocket實現實時雙向聊天

    這篇文章主要為大家詳細介紹了如何基于JavaScript?WebSocket實現實時雙向聊天,文中的示例代碼講解詳細,有需要的小伙伴可以參考一下
    2024-04-04
  • Javascript中的 “&” 和 “|” 詳解

    Javascript中的 “&” 和 “|” 詳解

    本文主要介紹了Javascript中的 “&” 和 “|” 的相關知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • JS工廠模式開發(fā)實踐案例分析

    JS工廠模式開發(fā)實踐案例分析

    這篇文章主要介紹了JS工廠模式開發(fā),結合具體實踐案例形式分析了基于javascript工廠模式實現的輪播功能相關操作技巧,需要的朋友可以參考下
    2019-10-10

最新評論

通州区| 德钦县| 古浪县| 电白县| 韶山市| 萨嘎县| 西吉县| 千阳县| 杂多县| 萝北县| 牙克石市| 涪陵区| 巴彦淖尔市| 康马县| 获嘉县| 怀柔区| 缙云县| 江北区| 凤凰县| 通化县| 澄迈县| 穆棱市| 澄迈县| 中山市| 全南县| 仁怀市| 宜阳县| 上林县| 绥宁县| 丰城市| 三台县| 肇州县| 尚义县| 扎赉特旗| 湟中县| 安泽县| 界首市| 六枝特区| 唐山市| 大理市| 安西县|