const express = require("express");
const app = express();
const port = process.env.PORT || 8080;
const jwt = require("jsonwebtoken");
const { expressjwt: ejwt } = require("express-jwt");
const secretKey = "mlkey"; // 任意密钥
// ====
// JWT
// jsonwebtoken 用于生成 JWT 字符串
// Express-jwt 用于将 JWT 字符串解析还原为 JSON 对象
app.use(
ejwt({
secret: secretKey,
algorithms: ["HS256"], // 设置加密算法
credentialsRequired: true, // 设置为 false 就不进行校验了,游客也可以访问
}).unless({
path: ["/login"], // 不需要校验的请求路径,可以设置多个
})
);
// ====
app.post("/login", express.urlencoded({ extended: false }), (req, res) => {
const userInfo = req.body;
// 生成 JWT
const token = jwt.sign({ username: userInfo.username }, secretKey, {
// const token = jwt.sign({ username: "生成内容。。。" }, secretKey, {
expiresIn: "30s", // 过期时间
});
res.send({
code: 0,
msg: "登录成功",
token,
});
});
// 获取用户信息,需要用户权限
app.get("/user", (req, res) => {
res.send({
code: 0,
msg: "获取用户信息成功",
data: req.auth,
});
});
// 全局错误处理中间件
app.use((err, req, res, next) => {
// 如果是 token 解析失败导致的错误
if (err.name === "UnauthorizedError") {
return res.status(401).send({
code: -1,
msg: "无效 Token",
});
}
return res.status(500).send({
code: -1,
msg: "未知错误",
});
});
app.listen(port, () => console.log(`Listening on port ${port}...`));
2.