一步步教會你微信小程式的登入鑑權

2022-08-27 21:15:17 字數 4119 閱讀 6567

前言

接入流程

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

1. 呼叫wx.login生成code

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

2345

67wx.login(

}

});

2. 獲取openid和session_key引數值

secret

小程式的secret

js_code

前面呼叫wx.login派發的code

grant_type

'authorization_code'

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

3. 生成3rd_session

那麼我們如果生成自己的登入態標識呢,這裡可以使用幾種常見的不可逆的雜湊演算法,比如md5、sha1等,將生成後的登入態標識(這裡我們統稱為'skey')返回給前端,並在前端維護這份登入態標識(一般是存入storage)。而在服務端呢,我們會把生成的skey存在使用者對應的資料表中,前端通過傳遞skey來訪問使用者的資訊。

可以看到這裡我們使用了sha1演算法來生成了乙個skey:?1

2345

6789

1011

const crypto = require('crypto');

return

.then(resdata => = resdata;

const skey = encryptsha1(session_key);

});

functionencryptsha1(data)

4. checksession

checksession這個步驟呢,我們一般是放在小程式啟動時就校驗登入態的邏輯處,這裡貼個校驗登入態的流程圖:

下面**即校驗登入態的簡單流程:?1

2345

6789

1011

1213

1415

1617

1819

let loginflag = wx.getstoragesync('skey');

if(loginflag) ,

// session_key 過期

fail:function()

});

)else

5. 支援emoji表情儲存

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

1.設定儲存字符集

在mysql5.5.3版本後,支援將資料庫及資料表和資料列的字符集設定為 utf8mb4 ,因此可在 /etc/my.cnf 設定預設字符集編碼及服務端編碼格式?1

2345

6789

10// 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?1

alterdatabase資料庫名稱characterset= utf8mb4collate= utf8mb4_unicode_ci;

設定資料表字符集為 utf8mb4?1

altertable資料表名稱converttocharactersetutf8mb4collateutf8mb4_unicode_ci;

設定資料列欄位字符集為 utf8mb4?1

altertable資料表名稱 change 欄位列名稱varchar(n)charactersetutf8mb4collateutf8mb4_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文件?1

2345

67,

}

最後

教你一步步啟動程式

今天介紹一下專案的啟動流程,專案主要分為前端 和後台 兩個部分,下面以專案名稱為 product 舉例 我們存放前端 的資料夾為 product web 存放後台 的資料夾為 product server 啟動前提 1.已安裝nodejs和npm管理工具,並設定全域性變數 2.輸入命令行時必須確保在...

上癮,一步步讓你PICK ME

讓使用者習慣你的產品 習慣 下意識做出的舉動。簡單的習慣是在很少或完全沒有意識思考的情況下完成的行為,指導了每個人日常近一半的行為。習慣是人們能夠通過在 基底神經節中儲存自動反應,來將注意力集中在其他事物 當大腦才去捷徑並停止積極思考下一步該怎麼做的時候,就會形成習慣 大腦很快便學會編纂行為,為其遇...

一步步蠶食的意思 熱血陽光被現實一步步蠶食

漸漸明白,你始終無法滿足所有人,認真的做自己就好了。記得,在上小學的時候。當時學校條件比較差,是用以前我們那邊乙個大族姓氏的祠堂改制而成,後面就是山,遇到下雨,外面大下,教室裡小下。在這樣的條件下,我竟然在這裡渡過了七年。由於條件比較差,對於我們這些孩子來說,更沒有玩具什麼的來填補課下的空餘時間。當...