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

首頁(yè) 微信小程序 小程序開(kāi)發(fā) 關(guān)于微信小程序登錄鑒權(quán)的步驟

關(guān)于微信小程序登錄鑒權(quán)的步驟

Jun 22, 2018 pm 03:47 PM
小程序 微信小程序 登錄鑒權(quán) 鑒權(quán)

登錄功能是許多小程序必備的一個(gè)功能,通過(guò)登錄系統(tǒng),我們可以記錄用戶在我們的小程序里一些行為,在后臺(tái)我們也可以模糊地確認(rèn)用戶。下面這篇文章主要給大家介紹了關(guān)于小程序登錄鑒權(quán)的相關(guān)資料,需要的朋友可以參考下。

前言

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

接入流程

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

?

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

1. 調(diào)用wx.login生成code

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

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

2. 獲取openid和session_key

我們先來(lái)介紹下openid,用過(guò)公眾號(hào)的童鞋應(yīng)該對(duì)這個(gè)標(biāo)識(shí)都不陌生了,在公眾平臺(tái)里,用來(lái)標(biāo)識(shí)每個(gè)用戶在訂閱號(hào)、服務(wù)號(hào)、小程序這三種不同應(yīng)用的唯一標(biāo)識(shí),也就是說(shuō)每個(gè)用戶在每個(gè)應(yīng)用的openid都是不一致的,所以在小程序里,我們可以用openid來(lái)標(biāo)識(shí)用戶的唯一性。

那么session_key是用來(lái)干嘛的呢?有了用戶標(biāo)識(shí),我們就需要讓該用戶進(jìn)行登錄,那么 session_key 就保證了當(dāng)前用戶進(jìn)行會(huì)話操作的有效性,這個(gè)session_key是微信服務(wù)端給我們派發(fā)的。也就是說(shuō),我們可以用這個(gè)標(biāo)識(shí)來(lái)間接地維護(hù)我們小程序用戶的登錄態(tài),那么這個(gè)session_key是怎么拿到的呢?我們需要在自己的服務(wù)端請(qǐng)求微信提供的第三方接口 https://api.weixin.qq.com/sns/jscode2session ,這個(gè)接口需要帶上四個(gè)參數(shù)字段:

參數(shù)
appid小程序的appid
secret小程序的secret
js_code前面調(diào)用wx.login派發(fā)的code
grant_type'authorization_code'

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

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

  2. session_key是有失效性的,即便是不調(diào)用wx.login,session_key也會(huì)過(guò)期,過(guò)期時(shí)間跟用戶使用小程序的頻率成正相關(guān),但具體的時(shí)間長(zhǎng)短開(kāi)發(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 || '返回?cái)?shù)據(jù)字段不完整'
  }
 } else {
  return data
 }
 });
}

3. 生成3rd_session

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

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

可以看到這里我們使用了sha1算法來(lái)生成了一個(gè)skey:

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

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

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

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

5. 支持emoji表情存儲(chǔ)

如果需要將用戶微信名存入數(shù)據(jù)表中,那么就確認(rèn)數(shù)據(jù)表及數(shù)據(jù)列的編碼格式。因?yàn)橛脩粑⑿琶赡軙?huì)包含emoji圖標(biāo),而常用的UTF8編碼只支持1-3個(gè)字節(jié),emoji圖標(biāo)剛好是4個(gè)字節(jié)的編碼進(jìn)行存儲(chǔ)。

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

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

在mysql5.5.3版本后,支持將數(shù)據(jù)庫(kù)及數(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ù)端字符集編碼,如果是對(duì)已經(jīng)存在的表和字段進(jìn)行編碼轉(zhuǎn)換,需要執(zhí)行下面幾個(gè)步驟:

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

ALTER DATABASE 數(shù)據(jù)庫(kù)名稱 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 指的是排序字符集,也就是用來(lái)對(duì)存儲(chǔ)的字符進(jìn)行排序和比較的, utf8mb4 常用的collation有兩種: utf8mb4_unicode_ci 和 utf8mb4_general_ci ,一般建議使用 utf8mb4_unicode_ci ,因?yàn)樗腔跇?biāo)準(zhǔn)的 Unicode Collation Algorithm(UCA) 來(lái)排序的,可以在各種語(yǔ)言進(jìn)行精確排序。這兩種排序方式的具體區(qū)別可以參考: What's the difference between utf8_general_ci and utf8_unicode_ci

2.通過(guò)使用sequelize對(duì)emoji字符進(jìn)行編碼入庫(kù),使用時(shí)再進(jìn)行解碼

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

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

最后

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

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

相關(guān)推薦:

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

微信小程序開(kāi)發(fā)中怎樣實(shí)現(xiàn)地址頁(yè)面三級(jí)聯(lián)動(dòng)

以上是關(guān)于微信小程序登錄鑒權(quán)的步驟的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

閑魚(yú)微信小程序正式上線 閑魚(yú)微信小程序正式上線 Feb 10, 2024 pm 10:39 PM

閑魚(yú)官方微信小程序悄然上線,在小程序中可以發(fā)布閑置與買(mǎi)家/賣(mài)家私信交流、查看個(gè)人資料及訂單、搜索物品等,有用好奇閑魚(yú)微信小程序叫什么,現(xiàn)在快來(lái)看一下。閑魚(yú)微信小程序叫什么答案:閑魚(yú),閑置交易二手買(mǎi)賣(mài)估價(jià)回收。1、在小程序中可以發(fā)布閑置、與買(mǎi)家/賣(mài)家私信交流、查看個(gè)人資料及訂單、搜索指定物品等功能;2、在小程序的頁(yè)面中有首頁(yè)、附近、發(fā)閑置、消息、我的5項(xiàng)功能;3、想要使用的話必要要開(kāi)通微信支付才可以購(gòu)買(mǎi);

實(shí)現(xiàn)微信小程序中的卡片翻轉(zhuǎn)特效 實(shí)現(xiàn)微信小程序中的卡片翻轉(zhuǎn)特效 Nov 21, 2023 am 10:55 AM

實(shí)現(xiàn)微信小程序中的卡片翻轉(zhuǎn)特效在微信小程序中,實(shí)現(xiàn)卡片翻轉(zhuǎn)特效是一種常見(jiàn)的動(dòng)畫(huà)效果,可以提升用戶體驗(yàn)和界面交互的吸引力。下面將具體介紹如何在微信小程序中實(shí)現(xiàn)卡片翻轉(zhuǎn)的特效,并提供相關(guān)代碼示例。首先,需要在小程序的頁(yè)面布局文件中定義兩個(gè)卡片元素,一個(gè)用于顯示正面內(nèi)容,一個(gè)用于顯示背面內(nèi)容,具體示例代碼如下:<!--index.wxml-->&l

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

實(shí)現(xiàn)微信小程序中的圖片濾鏡效果隨著社交媒體應(yīng)用的流行,人們?cè)絹?lái)越喜歡在照片中應(yīng)用濾鏡效果,以增強(qiáng)照片的藝術(shù)效果和吸引力。在微信小程序中也可以實(shí)現(xiàn)圖片濾鏡效果,為用戶提供更多有趣和創(chuàng)造性的照片編輯功能。本文將介紹如何在微信小程序中實(shí)現(xiàn)圖片濾鏡效果,并提供具體的代碼示例。首先,我們需要在微信小程序中使用canvas組件來(lái)加載和編輯圖片。canvas組件可以在頁(yè)面

實(shí)現(xiàn)微信小程序中的下拉菜單效果 實(shí)現(xiàn)微信小程序中的下拉菜單效果 Nov 21, 2023 pm 03:03 PM

實(shí)現(xiàn)微信小程序中的下拉菜單效果,需要具體代碼示例隨著移動(dòng)互聯(lián)網(wǎng)的普及,微信小程序成為了互聯(lián)網(wǎng)開(kāi)發(fā)的重要一環(huán),越來(lái)越多的人開(kāi)始關(guān)注和使用微信小程序。微信小程序的開(kāi)發(fā)相比傳統(tǒng)的APP開(kāi)發(fā)更加簡(jiǎn)便快捷,但也需要掌握一定的開(kāi)發(fā)技巧。在微信小程序的開(kāi)發(fā)中,下拉菜單是一個(gè)常見(jiàn)的UI組件,實(shí)現(xiàn)了更好的用戶操作體驗(yàn)。本文將詳細(xì)介紹如何在微信小程序中實(shí)現(xiàn)下拉菜單效果,并提供具

支付寶上線'漢字拾光-生僻字”小程序,用于征集、補(bǔ)充生僻字庫(kù) 支付寶上線'漢字拾光-生僻字”小程序,用于征集、補(bǔ)充生僻字庫(kù) Oct 31, 2023 pm 09:25 PM

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

閑魚(yú)微信小程序叫什么 閑魚(yú)微信小程序叫什么 Feb 27, 2024 pm 01:11 PM

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

微信小程序?qū)崿F(xiàn)圖片上傳功能 微信小程序?qū)崿F(xiàn)圖片上傳功能 Nov 21, 2023 am 09:08 AM

微信小程序?qū)崿F(xiàn)圖片上傳功能隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,微信小程序已經(jīng)成為了人們生活中不可或缺的一部分。微信小程序不僅提供了豐富的應(yīng)用場(chǎng)景,還支持開(kāi)發(fā)者自定義功能,其中包括圖片上傳功能。本文將介紹如何在微信小程序中實(shí)現(xiàn)圖片上傳功能,并提供具體的代碼示例。一、前期準(zhǔn)備工作在開(kāi)始編寫(xiě)代碼之前,我們需要先下載并安裝微信開(kāi)發(fā)者工具,并注冊(cè)成為微信開(kāi)發(fā)者。同時(shí),還需要了解微信

使用微信小程序?qū)崿F(xiàn)輪播圖切換效果 使用微信小程序?qū)崿F(xiàn)輪播圖切換效果 Nov 21, 2023 pm 05:59 PM

使用微信小程序?qū)崿F(xiàn)輪播圖切換效果微信小程序是一種輕量級(jí)的應(yīng)用程序,具有簡(jiǎn)單、高效的開(kāi)發(fā)和使用特點(diǎn)。在微信小程序中,實(shí)現(xiàn)輪播圖切換效果是常見(jiàn)的需求。本文將介紹如何使用微信小程序?qū)崿F(xiàn)輪播圖切換效果,并給出具體的代碼示例。首先,在微信小程序的頁(yè)面文件中,添加一個(gè)輪播圖組件。例如,可以使用<swiper>標(biāo)簽來(lái)實(shí)現(xiàn)輪播圖的切換效果。在該組件中,可以通過(guò)b

See all articles