Ali*_*ent 0 javascript node.js express jwt
我编写授权代码。单击登录按钮后,我创建一个新标题
res.header('Authorization', token)
Run Code Online (Sandbox Code Playgroud)
管理员登录路由器:
router.post('/admin_login', async (req, res) => {
const adminDB = data.admins;
const admin = adminDB.find(admin => req.body.email === admin.email)
if (!admin) return res.status(400).send('Email in not found!')
if (admin.password !== req.body.password) return res.status(400).send('Invalid password')
const token = jwt.sign({ admin }, 'the_secret_key')
res.header('Authorization', token)
res.redirect('/admin')
})
Run Code Online (Sandbox Code Playgroud)
在管理路由器中登录后,我不会收到授权标头,但我不会收到它。我在中看到授权标头
验证码:
const jwt = require('jsonwebtoken')
module.exports = (req, res, next) => {
const token = req.header('Authorization')
console.log(token)
if (!token) return res.status(401).send('Access Denied')
try {
const verified = jwt.verify(token, 'the_secret_key')
req.admin = verified
next()
} catch (e) {
res.status(400).send('Invalid token')
}
}
Run Code Online (Sandbox Code Playgroud)
第一张图片:管理路由器中的标头
第二张图片:单击登录按钮后 admin_login 路由器中的标头

请帮我
T.J*_*der 10
据我从文档中可以看出,headerExpressRequest对象或其扩展的 Node.js上没有方法IncomingMessage。
Express 文档说要检索标头,您可以使用get:
req.get(field)返回指定的HTTP请求头字段(不区分大小写的匹配)。
所以:
const token = req.get("Authorization");
Run Code Online (Sandbox Code Playgroud)
或者您可以使用以下headers对象IncomingMessage:
const token = req.headers["authorization"];
Run Code Online (Sandbox Code Playgroud)
(注意小写,Node.js 在构建对象时使标头名称小写。)