检查用户登陆
检查逻辑:
- 拿到cookie
- 查询redis,token,解析
- 解析
- 返回结果
前置内容
本文内容中未定义的方法和函数请先阅读:
- 【云剪切板——统一后端返回数据格式】:https://www.hyz.cool/articles/209
- 【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