JWT认证node+cookie
三个包
$ npm install express jsonwebtoken cookie-parser
简单server
const app = require("express")()
const cookieParser = require('cookie-parser')
app.use(cookieParser())
app.get("/", (req, res) => {
res.send("Hello World")
})
app.listen(3000)
授权
const jwt = require('jsonwebtoken')
app.get("/login", (req, res) => {
//创建token
const token = jwt.sign({
username: "admin"
}, "SECRET_KEY")
//设置token的cookie
res.cookie("token", token, {
httpOnly: true,
secure: true
})
//登录成功消息
res.send("登陆成功!")
}))
认证中间件,可以放在需要登录或者认证的route之前
const authentication = (req, res, next) => {
if (req.cookies.token) {
// 只有在认证成功以后req.user才存在,方便后面的route引用
req.user = jwt.verify(token, "SECRET_KEY")
}
next()
}
把认证中间件加入,改写上面的app.get("/"......
//可以像这样放在中间,也可以像下面这样放在前面
//app.use(authentication)
app.get("/", authentication, (req, res) => {
if (req.user){
res.send(`Hello ${req.user.username}!`)
} else {
res.send("Hello World")
}
})
最后模拟一个需要登陆以后才能进入的页面
app.get("/secret", (req, res) => {
if (!req.user){
return res.sendStatus(403)
}
})
当然这里是最简单的示例,实际应用中要复杂得多