久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

微信小程序中登錄鑒權功能怎么實現

這篇文章主要介紹了微信小程序中登錄鑒權功能怎么實現的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇微信小程序中登錄鑒權功能怎么實現文章都會有所收獲,下面我們一起來看看吧。

平泉網站制作公司哪家好,找創新互聯!從網頁設計、網站建設、微信開發、APP開發、成都響應式網站建設公司等網站項目制作,到程序開發,運營維護。創新互聯自2013年起到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯

接入流程

這里官方文檔上的流程圖已經足夠清晰,我們直接就該圖展開詳述和補充。

微信小程序中登錄鑒權功能怎么實現

首先大家看到這張圖,肯定會注意到小程序進行通信交互的不止是小程序前端和我們自己的服務端,微信第三方服務端也參與其中,那么微信服務端在其中扮演著怎樣的角色呢?我們一起來串一遍登錄鑒權的流程就明白了。

1. 調用wx.login生成code

wx.login()這個API的作用就是為當前用戶生成一個臨時的登錄憑證,這個臨時登錄憑證的有效期只有五分鐘。我們拿到這個登錄憑證后就可以進行下一步操作:獲取 openid 和 session_key

wx.login({
 success: function(loginRes) {
 if (loginRes.code) {
  // example: 081LXytJ1Xq1Y40sg3uJ1FWntJ1LXyth
 }
 }
});

2. 獲取openid和session_key

我們先來介紹下openid,用過公眾號的童鞋應該對這個標識都不陌生了,在公眾平臺里,用來標識每個用戶在訂閱號、服務號、小程序這三種不同應用的唯一標識,也就是說每個用戶在每個應用的openid都是不一致的,所以在小程序里,我們可以用openid來標識用戶的唯一性。

那么session_key是用來干嘛的呢?有了用戶標識,我們就需要讓該用戶進行登錄,那么 session_key 就保證了當前用戶進行會話操作的有效性,這個session_key是微信服務端給我們派發的。也就是說,我們可以用這個標識來間接地維護我們小程序用戶的登錄態,那么這個session_key是怎么拿到的呢?我們需要在自己的服務端請求微信提供的第三方接口 https://api.weixin.qq.com/sns/jscode2session ,這個接口需要帶上四個參數字段:

參數
appid小程序的appid
secret小程序的secret
js_code前面調用wx.login派發的code
grant_type'authorization_code'

從這幾個參數,我們可以看出,要請求這個接口必須先調用wx.login()來獲取到用戶當前會話的code。那么為什么我們要在服務端來請求這個接口呢?其實是出于安全性的考量,如果我們在前端通過request調用此接口,就不可避免的需要將我們小程序的appid和小程序的secret暴露在外部,同時也將微信服務端下發的session_key暴露給“有心之人”,這就給我們的業務安全帶來極大的風險。除了需要在服務端進行session_key的獲取,我們還需要注意兩點:

  1. session_key和微信派發的code是一一對應的,同一code只能換取一次session_key。每次調用wx.login() ,都會下發一個新的code和對應的session_key,為了保證用戶體驗和登錄態的有效性,開發者需要清楚用戶需要重新登錄時才去調用wx.login()

  2. session_key是有失效性的,即便是不調用wx.login,session_key也會過期,過期時間跟用戶使用小程序的頻率成正相關,但具體的時間長短開發者和用戶都是獲取不到的

function getSessionKey (code, appid, appSecret) {
 var opt = {
 method: 'GET',
 url: 'https://api.weixin.qq.com/sns/jscode2session',
 params: {
  appid: appid,
  secret: appSecret,
  js_code: code,
  grant_type: 'authorization_code'
 }
 };
 return http(opt).then(function (response) {
 var data = response.data;
 if (!data.openid || !data.session_key || data.errcode) {
  return {
  result: -2,
  errmsg: data.errmsg || '返回數據字段不完整'
  }
 } else {
  return data
 }
 });
}

3. 生成3rd_session

前面說過通過 session_key 來“間接”地維護登錄態,所謂間接,也就是我們需要 自己維護用戶的登錄態信息 ,這里也是考慮到安全性因素,如果直接使用微信服務端派發的session_key來作為業務方的登錄態使用,會被“有心之人”用來獲取用戶的敏感信息,比如wx.getUserInfo()這個接口呢,就需要session_key來配合解密微信用戶的敏感信息。

那么我們如果生成自己的登錄態標識呢,這里可以使用幾種常見的不可逆的哈希算法,比如md5、sha1等,將生成后的登錄態標識(這里我們統稱為'skey')返回給前端,并在前端維護這份登錄態標識(一般是存入storage)。而在服務端呢,我們會把生成的skey存在用戶對應的數據表中,前端通過傳遞skey來存取用戶的信息。

可以看到這里我們使用了sha1算法來生成了一個skey:

const crypto = require('crypto');
return getSessionKey(code, appid, secret)
 .then(resData => {
 // 選擇加密算法生成自己的登錄態標識
 const { session_key } = resData;
 const skey = encryptSha1(session_key);
 });
 
function encryptSha1(data) {
 return crypto.createHash('sha1').update(data, 'utf8').digest('hex')
}

4. checkSession

前面我們將skey存入前端的storage里,每次進行用戶數據請求時會帶上skey,那么如果此時session_key過期呢?所以我們需要調用到wx.checkSession()這個API來校驗當前session_key是否已經過期,這個API并不需要傳入任何有關session_key的信息參數,而是微信小程序自己去調自己的服務來查詢用戶最近一次生成的session_key是否過期。如果當前session_key過期,就讓用戶來重新登錄,更新session_key,并將最新的skey存入用戶數據表中。

checkSession這個步驟呢,我們一般是放在小程序啟動時就校驗登錄態的邏輯處,這里貼個校驗登錄態的流程圖:

微信小程序中登錄鑒權功能怎么實現

下面代碼即校驗登錄態的簡單流程:

let loginFlag = wx.getStorageSync('skey');
if (loginFlag) {
 // 檢查 session_key 是否過期
 wx.checkSession({
 // session_key 有效(未過期)
 success: function() {
  // 業務邏輯處理
 },
 
 // session_key 過期
 fail: function() {
  // session_key過期,重新登錄
  doLogin();
 }
 });
) else {
 // 無skey,作為首次登錄
 doLogin();
}

5. 支持emoji表情存儲

如果需要將用戶微信名存入數據表中,那么就確認數據表及數據列的編碼格式。因為用戶微信名可能會包含emoji圖標,而常用的UTF8編碼只支持1-3個字節,emoji圖標剛好是4個字節的編碼進行存儲。

這里有兩種方式(以MySQL為例):

1.設置存儲字符集

在mysql5.5.3版本后,支持將數據庫及數據表和數據列的字符集設置為 utf8mb4 ,因此可在 /etc/my.cnf 設置默認字符集編碼及服務端編碼格式

// my.cnf

[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

設置完默認字符集編碼及服務端字符集編碼,如果是對已經存在的表和字段進行編碼轉換,需要執行下面幾個步驟:

設置數據庫字符集為 utf8mb4

ALTER DATABASE 數據庫名稱 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

設置數據表字符集為 utf8mb4

ALTER TABLE 數據表名稱 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

設置數據列字段字符集為 utf8mb4

ALTER TABLE 數據表名稱 CHANGE 字段列名稱 VARCHAR(n) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

這里的 COLLATE 指的是排序字符集,也就是用來對存儲的字符進行排序和比較的, utf8mb4 常用的collation有兩種: utf8mb4_unicode_ci 和 utf8mb4_general_ci ,一般建議使用 utf8mb4_unicode_ci ,因為它是基于標準的 Unicode Collation Algorithm(UCA) 來排序的,可以在各種語言進行精確排序。

2.通過使用sequelize對emoji字符進行編碼入庫,使用時再進行解碼

這里是sequelize的配置,可參考 Sequelize文檔

{
 dialect: 'mysql', // 數據庫類型
 dialectOptions: { 
  charset: 'utf8mb4',
  collate: "utf8mb4_unicode_ci"
 },
}

關于“微信小程序中登錄鑒權功能怎么實現”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“微信小程序中登錄鑒權功能怎么實現”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注創新互聯行業資訊頻道。

分享名稱:微信小程序中登錄鑒權功能怎么實現
網站URL:http://www.js-pz168.com/article7/jhpooj.html

成都網站建設公司_創新互聯,為您提供品牌網站建設營銷型網站建設面包屑導航、網站改版、網站策劃網頁設計公司

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

h5響應式網站建設
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
日本视频一区在线观看| 亚洲一区综合| 91成人免费网站| 精品国产成人系列| 一区二区三区蜜桃网| 久草精品在线观看| 国产精品一区二区在线观看| 色综合色综合色综合| 2021国产精品久久精品| 香蕉影视欧美成人| 99视频一区二区| 亚洲欧洲日韩综合二区| 精品久久久久久久久久久久久久久 | 亚洲人成在线播放网站岛国| 免费xxxx性欧美18vr| 91久久精品一区二区别| 色综合天天狠狠| 国产精品网站在线播放| 另类小说视频一区二区| 国产乱码一区| 欧美精品自拍偷拍| 亚洲欧美日韩一区二区三区在线观看| 国产在线精品国自产拍免费| 九九久久99| 欧美一级片在线| 亚洲乱码国产乱码精品精的特点| 国产精品资源在线| 日韩av一区二区三区在线 | 日本精品一区二区| 欧美tickling挠脚心丨vk| 亚洲超碰精品一区二区| 91精品久久香蕉国产线看观看| 极品美女销魂一区二区三区| 久久综合福利| 日韩免费成人网| 日韩中文字幕麻豆| 国产免费一区二区| 欧美一区二区三区在| 亚洲国产精品人人做人人爽| aaa亚洲精品| 在线观看视频一区二区欧美日韩| 亚洲欧美影音先锋| 成人免费av网站| 91国在线观看| 樱花影视一区二区| 2022国产精品| 4hu四虎永久在线影院成人| 亚洲国产综合色| 国产麻豆一区二区三区在线观看| 91精品欧美福利在线观看| 午夜成人免费视频| 精品在线视频一区二区| 欧美电影免费观看高清完整版在| 秋霞国产午夜精品免费视频| 久久综合九色综合久99| 久久久久久久精| 国产一区日韩二区欧美三区| 亚洲精美视频| 亚洲日本va午夜在线影院| 91麻豆自制传媒国产之光| 在线不卡一区二区| 免费人成精品欧美精品| 日韩av大全| 日韩美女视频一区二区| 91浏览器入口在线观看| 欧美一区二区高清| 精品一区二区三区久久久| 亚洲最大免费| 一级日本不卡的影视| 国产女人水真多18毛片18精品| 欧美成人一区二区| 国产精品一区二区在线看| 在线影院国内精品| 天天影视网天天综合色在线播放| 免费精品视频一区二区三区| 欧美国产日韩a欧美在线观看| 国产成人亚洲综合色影视| 欧美性大战久久| 奇米在线7777在线精品| 一本久道久久综合狠狠爱亚洲精品| 亚洲色图欧洲色图婷婷| 国产精品加勒比| 久久久九九九九| 99久久国产综合精品色伊| 日韩一区二区视频| 国模冰冰炮一区二区| 欧美午夜影院一区| 青娱乐精品视频| 日本乱码高清不卡字幕| 天天综合日日夜夜精品| 亚洲精品在线观看免费| 亚洲国产精品久久艾草纯爱| 欧美xxxx黑人又粗又长精品| 《视频一区视频二区| 国产日韩欧美综合精品| 国产精品美女一区二区在线观看| 波多野结衣成人在线| 久久精品一区二区| 91视频免费进入| 久久久99精品久久| 99久久无色码| 国产欧美综合在线| 国产精品 日韩| 国产精品久久久久影院老司 | 偷拍视频一区二区| 亚洲午夜久久久久久久久电影院| 欧美凹凸一区二区三区视频 | 狠狠网亚洲精品| 欧美日韩精品欧美日韩精品| 狠狠色狠狠色合久久伊人| 欧美狂野另类xxxxoooo| 国产成人av一区二区三区在线| 91精品国产综合久久国产大片| 国产精品99久久久久久久女警| 日韩午夜在线观看视频| 成人国产免费视频| 久久久www成人免费毛片麻豆| 999日本视频| 综合在线观看色| 日本电影一区二区三区| 亚洲国产人成综合网站| 在线观看精品视频| 激情综合色综合久久| 欧美一区永久视频免费观看| 成人高清av在线| 国产视频在线观看一区二区三区| 国产乱码精品一区二区三区日韩精品| 成人免费一区二区三区在线观看| 欧美精品在线一区| 午夜激情一区二区三区| 欧美写真视频网站| 成人毛片视频在线观看| 欧美激情综合在线| 欧美一级爽aaaaa大片| 婷婷夜色潮精品综合在线| 欧美日韩亚洲综合在线| 成人美女视频在线看| 亚洲国产精品激情在线观看| 欧美连裤袜在线视频| 日韩福利电影在线| 欧美精品18+| 91福利入口| 一区二区三区.www| 欧美性淫爽ww久久久久无| 丁香婷婷综合五月| 国产精品二三区| 亚洲一区不卡在线| 国产精品69毛片高清亚洲| 久久久精品影视| 日韩欧美精品在线不卡| 精品影视av免费| 久久久亚洲高清| 日本一区二区在线视频| 久久99精品久久久| 久久久久久久综合| 日韩资源av在线| 国产乱人伦偷精品视频免下载| 久久青草欧美一区二区三区| 欧美日韩精品久久| 激情国产一区二区| 中文子幕无线码一区tr| 亚洲午夜在线观看| 国产91色综合久久免费分享| 中文字幕一区二区三区视频 | 日韩av中文字幕一区二区 | 粉嫩绯色av一区二区在线观看| 中文欧美字幕免费| 一区视频二区视频| 成人福利在线看| 一区二区欧美视频| 91精品婷婷国产综合久久竹菊| 国产二区不卡| 日本不卡不码高清免费观看 | 成人av动漫网站| 一区二区三区四区蜜桃| 3atv一区二区三区| 久久免费视频1| 国产一区二区视频在线播放| 国产精品免费网站在线观看| 色吊一区二区三区| 91传媒免费看| 青椒成人免费视频| 欧美国产精品v| 色综合久久综合网欧美综合网| 99国产精品国产精品毛片| 亚洲高清视频在线| 精品国产伦一区二区三区免费| 日韩欧美一区二区三区四区五区| 国产成人小视频| 樱花草国产18久久久久| 日韩欧美激情在线| 亚洲精品久久区二区三区蜜桃臀| 成人一区二区视频| 亚洲第一搞黄网站| 久久久久综合网| 91福利小视频| 精品午夜一区二区三区| 国产精品一线二线三线精华| 一二三四社区欧美黄| 精品国产91乱码一区二区三区|