let encryptUtil = require("../utils/encryptUtil");
let config = require("../config");
let userService = require("../service/user");
function checkUrl(url) {
? ? // 不需要登錄
? ? // 注冊 : /user/regist
? ? // 登錄 : /user/login
? ? let ignoreUrls = [
? ? ? ? /\/user\/regist/,
? ? ? ? /\/user\/login/
? ? ];
? ? // /user/login
? ? // 標志位,當前的url是否需要進行登錄狀態(tài)的校驗,默認值是需要
? ? let isNeedCheck = true;
? ? // js中的forEach()是不能中斷的,break
? ? for (let i = 0; i < ignoreUrls.length; i++) {
? ? ? ? let ignoreUrl = ignoreUrls[i];
? ? ? ? if (ignoreUrl.test(url)) {
? ? ? ? ? ? isNeedCheck = false;
? ? ? ? ? ? break;
? ? ? ? }
? ? }
? ? return isNeedCheck;
}
// 校驗用戶是否已經(jīng)登錄
module.exports = async (request, response, next) => {
? ? // 用戶請求的路徑
? ? let url = request.url;
? ? // 用戶請求的url是需要進行登錄狀態(tài)的校驗
? ? if (checkUrl(url)) {
? ? ? ? // 獲取token
? ? ? ? let token = request.get("token");
? ? ? ? if (!token) {
? ? ? ? ? ? throw? Error("請求頭中沒有Token數(shù)據(jù),請登錄");
? ? ? ? }
? ? ? ? // 解密出來的是json字符串,不是js對象,所以不能通過.屬性名的方式獲取到屬性值
? ? ? ? let tokenDecrypted = null;
? ? ? ? try {
? ? ? ? ? ? tokenDecrypted = encryptUtil.aesDecrypt(token, config.TOKEN_KEY);
? ? ? ? } catch (e) {
? ? ? ? ? ? throw? Error("token解密失敗,請登錄");
? ? ? ? }
? ? ? ? // 把json字符串轉成js對象
? ? ? ? let tokenJs = JSON.parse(tokenDecrypted);
? ? ? ? // 獲取token的有效期
? ? ? ? let expire = tokenJs.expire;
? ? ? ? if (Date.now() > expire) {
? ? ? ? ? ? throw? Error("token已過期,請重新登錄");
? ? ? ? }
? ? ? ? // 獲取token中的用戶名
? ? ? ? let username = tokenJs.username;
? ? ? ? // 根據(jù)用戶名查詢用戶
? ? ? ? let user = await userService.findByUsername(username);
? ? ? ? // 如果查詢不到,說明token是偽造的
? ? ? ? if (!user) {
? ? ? ? ? ? throw? Error("token無效,請重新登錄");
? ? ? ? }
? ? ? ? // 把查詢到的用戶存儲到request對象身上
? ? ? ? request.user = user;
? ? }
? ? // 放行的代碼
? ? next();
}
電商項目中的用戶token中間件
最后編輯于 :
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內(nèi)容
- Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
- 上大學之后,要學的第一課就是怎樣照顧好自己。 我記得去年剛開學不久,我借著媽媽生日的機會給爸媽寄了明信片,交代了一...