亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 微信小程式 小程式開發(fā) 關(guān)於微信小程式登入鑑權(quán)的步驟

關(guān)於微信小程式登入鑑權(quán)的步驟

Jun 22, 2018 pm 03:47 PM
小程式 微信小程式 登入鑑權(quán) 鑑權(quán)

登入功能是許多小程式必備的功能,透過登入系統(tǒng),我們可以記錄用戶在我們的小程式裡一些行為,在後臺我們也可以模糊地確認(rèn)用戶。以下這篇文章主要為大家介紹了關(guān)於小程式登入鑑權(quán)的相關(guān)資料,需要的朋友可以參考下。

前言

為了方便小程式應(yīng)用程式使用微信登入態(tài)進(jìn)行授權(quán)登錄,微信小程式提供了登入授權(quán)的開放接口。乍看文檔,感覺文檔上講的非常有道理,但是實現(xiàn)起來又真的是摸不著頭腦,不知道如何管理和維護(hù)登入態(tài)。本文就來手把手的教會大家在業(yè)務(wù)裡如何接入和維護(hù)微信登錄態(tài),下面話不多說了,來一起看看詳細(xì)的介紹吧。

存取流程

這裡官方文件上的流程圖已經(jīng)足夠清晰,我們直接就該圖展開詳述和補(bǔ)充。

?

首先大家看到這張圖,一定會注意到小程式進(jìn)行通訊互動的不隻小程式前端和我們自己的服務(wù)端,微信第三方服務(wù)端也參與其中,那麼微信服務(wù)端在其中扮演著怎樣的角色呢?我們一起來串一遍登入鑑權(quán)的流程就明白了。

1. 呼叫wx.login產(chǎn)生code

#wx.login()這個API的作用就是要為目前使用者產(chǎn)生一個臨時的登入憑證,這個臨時登入憑證的有效期限只有五分鐘。我們拿到這個登入憑證後就可以進(jìn)行下一步操作:取得openid 和session_key

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

2. 取得openid和session_key

我們先來介紹下openid,用過公眾號的童鞋應(yīng)該對這個標(biāo)識都不陌生了,在公眾平臺裡,用來標(biāo)識每個用戶在訂閱號、服務(wù)號、小程式這三種不同應(yīng)用的唯一標(biāo)識,也就是說每個使用者在每個應(yīng)用程式的openid都是不一致的,所以在小程式裡,我們可以用openid來標(biāo)識使用者的唯一性。

那麼session_key是用來幹嘛的呢?有了使用者標(biāo)識,我們就需要讓該使用者登入,那麼 session_key 就保證了目前使用者進(jìn)行會話操作的有效性,而這個session_key是微信服務(wù)端給我們派發(fā)的。也就是說,我們可以用這個識別來間接維護(hù)我們小程式使用者的登入態(tài),那麼這個session_key是怎麼拿到的呢?我們需要在自己的服務(wù)端請求微信提供的第三方介面https://api.weixin.qq.com/sns/jscode2session ,這個介面需要帶四個參數(shù)欄位:

小程式的secret前面呼叫wx.login派發(fā)的code'authorization_code'
參數(shù)
#appid小程式的appid
##secret
js_code
grant_type
#######

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

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

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

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 || '返回數(shù)據(jù)字段不完整'
  }
 } else {
  return data
 }
 });
}

3. 生成3rd_session

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

那么我們?nèi)绻勺约旱牡卿洃B(tài)標(biāo)識呢,這里可以使用幾種常見的不可逆的哈希算法,比如md5、sha1等,將生成后的登錄態(tài)標(biāo)識(這里我們統(tǒng)稱為'skey')返回給前端,并在前端維護(hù)這份登錄態(tài)標(biāo)識(一般是存入storage)。而在服務(wù)端呢,我們會把生成的skey存在用戶對應(yīng)的數(shù)據(jù)表中,前端通過傳遞skey來存取用戶的信息。

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

const crypto = require('crypto');
return getSessionKey(code, appid, secret)
 .then(resData => {
 // 選擇加密算法生成自己的登錄態(tài)標(biāo)識
 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里,每次進(jìn)行用戶數(shù)據(jù)請求時會帶上skey,那么如果此時session_key過期呢?所以我們需要調(diào)用到wx.checkSession()這個API來校驗當(dāng)前session_key是否已經(jīng)過期,這個API并不需要傳入任何有關(guān)session_key的信息參數(shù),而是微信小程序自己去調(diào)自己的服務(wù)來查詢用戶最近一次生成的session_key是否過期。如果當(dāng)前session_key過期,就讓用戶來重新登錄,更新session_key,并將最新的skey存入用戶數(shù)據(jù)表中。

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

下面代碼即校驗登錄態(tài)的簡單流程:

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

5. 支持emoji表情存儲

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

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

1.設(shè)置存儲字符集

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

// 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

設(shè)置完默認(rèn)字符集編碼及服務(wù)端字符集編碼,如果是對已經(jīng)存在的表和字段進(jìn)行編碼轉(zhuǎn)換,需要執(zhí)行下面幾個步驟:

設(shè)置數(shù)據(jù)庫字符集為 utf8mb4

ALTER DATABASE 數(shù)據(jù)庫名稱 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

設(shè)置數(shù)據(jù)表字符集為 utf8mb4

ALTER TABLE 數(shù)據(jù)表名稱 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

設(shè)置數(shù)據(jù)列字段字符集為 utf8mb4

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

這里的 COLLATE 指的是排序字符集,也就是用來對存儲的字符進(jìn)行排序和比較的, utf8mb4 常用的collation有兩種: utf8mb4_unicode_ci 和 utf8mb4_general_ci ,一般建議使用 utf8mb4_unicode_ci ,因為它是基于標(biāo)準(zhǔn)的 Unicode Collation Algorithm(UCA) 來排序的,可以在各種語言進(jìn)行精確排序。這兩種排序方式的具體區(qū)別可以參考: What's the difference between utf8_general_ci and utf8_unicode_ci

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

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

{
 dialect: 'mysql', // 數(shù)據(jù)庫類型
 dialectOptions: { 
  charset: 'utf8mb4',
  collate: "utf8mb4_unicode_ci"
 },
}

最后

前面講了微信小程序如何接入微信登錄態(tài)標(biāo)識的詳細(xì)流程,那么如何獲取小程序中的用戶數(shù)據(jù)以及對用戶敏感數(shù)據(jù)進(jìn)行解密,并保證用戶數(shù)據(jù)的完整性,我將在下一篇文章給大家做一個詳細(xì)地介紹。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,更多相關(guān)內(nèi)容請關(guān)注PHP中文網(wǎng)!

相關(guān)推薦:

新手怎樣開發(fā)第一款微信小程序

微信小程序開發(fā)中怎樣實現(xiàn)地址頁面三級聯(lián)動

以上是關(guān)於微信小程式登入鑑權(quán)的步驟的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

閒魚微信小程式正式上線 閒魚微信小程式正式上線 Feb 10, 2024 pm 10:39 PM

閒魚官方微信小程式悄悄上線,在小程式中可以發(fā)布閒置與買家/賣家私訊交流、查看個人資料及訂單、搜尋物品等,有用好奇閒魚微信小程式叫什麼,現(xiàn)在快來看一下。閒魚微信小程式叫什麼答案:閒魚,閒置交易二手買賣估價回收。 1、在小程式中可以發(fā)布閒置、與買家/賣家私訊交流、查看個人資料及訂單、搜尋指定物品等功能;2、在小程式的頁面中有首頁、附近、發(fā)閒置、訊息、我的5項功能;3、想要使用的話必要要開通微信支付才可以購買;

實作微信小程式中的卡片翻轉(zhuǎn)特效 實作微信小程式中的卡片翻轉(zhuǎn)特效 Nov 21, 2023 am 10:55 AM

實作微信小程式中的卡片翻轉(zhuǎn)特效在微信小程式中,實現(xiàn)卡片翻轉(zhuǎn)特效是一種常見的動畫效果,可以提升使用者體驗和介面互動的吸引力。以下將具體介紹如何在微信小程式中實現(xiàn)卡片翻轉(zhuǎn)的特效,並提供相關(guān)程式碼範(fàn)例。首先,需要在小程式的頁面佈局檔案中定義兩個卡片元素,一個用於顯示正面內(nèi)容,一個用於顯示背面內(nèi)容,具體範(fàn)例程式碼如下:<!--index.wxml-->&l

實現(xiàn)微信小程式中的圖片濾鏡效果 實現(xiàn)微信小程式中的圖片濾鏡效果 Nov 21, 2023 pm 06:22 PM

實現(xiàn)微信小程式中的圖片濾鏡效果隨著社群媒體應(yīng)用程式的流行,人們越來越喜歡在照片中應(yīng)用濾鏡效果,以增強(qiáng)照片的藝術(shù)效果和吸引力。在微信小程式中也可以實現(xiàn)圖片濾鏡效果,為使用者提供更多有趣和創(chuàng)意的照片編輯功能。本文將介紹如何在微信小程式中實現(xiàn)圖片濾鏡效果,並提供具體的程式碼範(fàn)例。首先,我們需要在微信小程式中使用canvas元件來載入和編輯圖片。 canvas元件可以在頁面

實作微信小程式中的下拉式選單效果 實作微信小程式中的下拉式選單效果 Nov 21, 2023 pm 03:03 PM

實現(xiàn)微信小程式中的下拉式選單效果,需要具體程式碼範(fàn)例隨著行動互聯(lián)網(wǎng)的普及,微信小程式成為了網(wǎng)路開發(fā)的重要一環(huán),越來越多的人開始關(guān)注和使用微信小程式。微信小程式的開發(fā)相比傳統(tǒng)的APP開發(fā)更加簡單快捷,但也需要掌握一定的開發(fā)技巧。在微信小程式的開發(fā)中,下拉式選單是一個常見的UI元件,實現(xiàn)了更好的使用者操作體驗。本文將詳細(xì)介紹如何在微信小程式中實現(xiàn)下拉式選單效果,並提供具

支付寶上線「漢字拾光-生僻字」小程序,用於徵集、補(bǔ)充生僻字庫 支付寶上線「漢字拾光-生僻字」小程序,用於徵集、補(bǔ)充生僻字庫 Oct 31, 2023 pm 09:25 PM

本站10月31日消息,今年5月27日,螞蟻集團(tuán)宣布啟動“漢字拾光計劃”,最近又迎來新進(jìn)展:支付寶上線“漢字拾光-生僻字”小程序,用於向社會徵集生僻字,補(bǔ)充生僻字庫,同時提供不同的生僻字輸入體驗,以幫助完善支付寶內(nèi)的生僻字輸入方法。目前,用戶搜尋「漢字拾光」、「生僻字」等關(guān)鍵字就可以進(jìn)入「生僻字」小程式。在小程式裡,使用者可以提交尚未被系統(tǒng)辨識輸入的生僻字圖片,支付寶工程師確認(rèn)後,將會對字庫進(jìn)行補(bǔ)錄入。本站注意到,使用者也可以在小程式體驗最新的拆字輸入法,這項輸入法針對讀音不明確的生僻字設(shè)計。用戶拆

閒魚微信小程式叫什麼 閒魚微信小程式叫什麼 Feb 27, 2024 pm 01:11 PM

閒魚官方微信小程式已經(jīng)悄悄上線,它為用戶提供了一個便捷的平臺,讓你可以輕鬆地發(fā)布和交易閒置物品。在小程式中,你可以與買家或賣家進(jìn)行私訊交流,查看個人資料和訂單,以及搜尋你想要的物品。那麼閒魚在微信小程式中究竟叫什麼呢,這篇教學(xué)攻略將為您詳細(xì)介紹,想要了解的用戶們快來跟著本文繼續(xù)閱讀吧!閒魚微信小程式叫什麼答案:閒魚,閒置交易二手買賣估價回收。 1、在小程式中可以發(fā)布閒置、與買家/賣家私訊交流、查看個人資料及訂單、搜尋指定物品等功能;2、在小程式的頁面中有首頁、附近、發(fā)閒置、訊息、我的5項功能;3、

微信小程式實現(xiàn)圖片上傳功能 微信小程式實現(xiàn)圖片上傳功能 Nov 21, 2023 am 09:08 AM

微信小程式實現(xiàn)圖片上傳功能隨著行動網(wǎng)路的發(fā)展,微信小程式已經(jīng)成為了人們生活中不可或缺的一部分。微信小程式不僅提供了豐富的應(yīng)用場景,還支援開發(fā)者自訂功能,其中包括圖片上傳功能。本文將介紹如何在微信小程式中實作圖片上傳功能,並提供具體的程式碼範(fàn)例。一、前期準(zhǔn)備工作在開始編寫程式碼之前,我們需要先下載並安裝微信開發(fā)者工具,並註冊成為微信開發(fā)者。同時,也需要了解微信

實現(xiàn)微信小程式中的圖片旋轉(zhuǎn)效果 實現(xiàn)微信小程式中的圖片旋轉(zhuǎn)效果 Nov 21, 2023 am 08:26 AM

實現(xiàn)微信小程式中的圖片旋轉(zhuǎn)效果,需要具體程式碼範(fàn)例微信小程式是一種輕量級的應(yīng)用程序,為用戶提供了豐富的功能和良好的用戶體驗。在小程式中,開發(fā)者可以利用各種元件和API來實現(xiàn)各種效果。其中,圖片旋轉(zhuǎn)效果是一種常見的動畫效果,可以為小程式增添趣味性和視覺效果。在微信小程式中實作圖片旋轉(zhuǎn)效果,需要使用小程式提供的動畫API。以下是一個具體的程式碼範(fàn)例,展示如何在小程

See all articles