前言
為了方便小程序應用使用微信登錄態進行授權登錄,微信小程序提供了登錄授權的開放接口。乍壹看文檔,感覺文檔上講的非常有道理,但是實現起來又真的是摸不著頭腦,不知道如何管理和維護登錄態。本文就來手把手的教會大家在業務裏如何接入和維護微信登錄態,下面話不多說了,來壹起看看詳細的介紹吧。
接入流程
這裏官方文檔上的流程圖已經足夠清晰,我們直接就該圖展開詳述和補充。
首先大家看到這張圖,肯定會註意到小程序進行通信交互的不止是小程序前端和我們自己的服務端,微信第三方服務端也參與其中,那麽微信服務端在其中扮演著怎樣的角色呢?我們壹起來串壹遍登錄鑒權的流程就明白了。
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是怎麽拿到的呢?我們需要在自己的服務端請求微信提供的第三方接口 f 設置默認字符集編碼及服務端編碼格式
// 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) 來排序的,可以在各種語言進行精確排序。這兩種排序方式的具體區別可以參考: What's the difference between utf8_general_ci and utf8_unicode_ci
2.通過使用sequelize對emoji字符進行編碼入庫,使用時再進行解碼
這裏是sequelize的配置,可參考 Sequelize文檔
{
dialect: 'mysql', // 數據庫類型
dialectOptions: {
charset: 'utf8mb4',
collate: "utf8mb4_unicode_ci"
},
}相信看了本文案例妳已經掌握了方法,更多精彩請關註Gxl網其它相關文章!
推薦閱讀:
怎樣搭建vue2.0+boostrap項目
Angular入口組件與聲明式組件案例對比