检查用户登陆

检查逻辑:

  1. 拿到cookie
  2. 查询redis,token,解析
  3. 解析
  4. 返回结果

前置内容

本文内容中未定义的方法和函数请先阅读:

  1. 【云剪切板——统一后端返回数据格式】:https://www.hyz.cool/articles/209
  2. 【Nodejs express 连接 Redis】:https://www.hyz.cool/articles/208

路由控制

  • UserController.js
const express = require("express")
const UserController = express.Router();
const UserService = require("../services/UserService")

UserController.get("/check",UserService.check)

module.exports = UserController
js

服务实现

  • UserService.js
export const check = (req, res, next) => {
    getLoginUser(req)
        .then(result => {
            return Result.result(res, Result.success(result));
        })
        .catch(err => {
            return Result.result(res, Result.notLogin());
        })

}
js

解析tokenKey

/**
 * 拿到tokenKey
 * @param cookie
 * @returns {string}
 */
function getTokenKey(cookie = "") {
    let arr = cookie.split(";")
    for (let i = 0; i < arr.length; i++) {
        if (arr[i].trim().startsWith(KEY.COOKIE + "=")) {
            return decodeURIComponent(arr[i].trim().substring(5))
        }
    }
    return ""
}
js

解析token

使用jwt来解析token:

jwt.verify(token, JWTSecret, (err, result) => {})
js

完整代码


const jwt = require("jsonwebtoken")

/**
 * 解析token
 * @param token
 * @returns {Promise<unknown>}
 */
function parseUserDTOFromToken (token) {
    return new Promise((resolve, reject) => {
        jwt.verify(token, JWTSecret, (err, result) => {
            console.log("result...",err,result)
            if (err) reject(err)
            else resolve(result)
        })
    })
}
js
打赏
  • 微信
  • 支付宝
评论
来发评论吧~
···

歌手: