问题描述
if(req.headers.authorization && req.headers.authorization.startsWith('Bearer')){
token = req.headers.authorization.split(" ")[1]
}
*我的问题是是否有必要通过添加Bearer来添加上面代码中已经做过的东西?它是增强令牌存在检查的东西还是只是一种方式。 我认为这种方式也应该有效
if(req.headers.authorization){
token = req.headers.authorization
}
这两者有什么区别?
解决方法
这两者有什么区别?
if(req.headers.authorization && req.headers.authorization.startsWith('Bearer')){
token = req.headers.authorization.split(" ")[1]
}
它将检查 authorization
标头是否存在并分配包含 authorization
的 bearer
字符串,您需要先将其隔离以验证令牌
if(req.headers.authorization){
token = req.headers.authorization
}
它将检查 authorization
是否存在,如果存在,则包含 Bearer
。可以检查一下,但是不需要,除非您对所有 API 都采用相同的方法
你应该这样做:
const jwt = require('jsonwebtoken');
const verifyToken = async (req,res,next) => {
const { authorization } = req.headers;
const token = authorization.split(' ')[1];
try {
const jt = await jwt.verify(token,'key');
//do something
} catch (error) {
res.status(401).send("Unauthorized");
}
}
module.exports = verifyToken;
,
1. 2 代码的区别。
这两个代码有相同的目的:获取头授权中的 JWT。根据您在请求中发送 JWT 的方式,它们的行为会有所不同。
2. 解释
通常,我们使用Bearer Authentication 将 JWT 令牌发送到服务器。在这种模式下:
客户端必须在授权标头中发送此令牌,当 向受保护资源发出请求:
授权:持有人[[token]]
(来源:https://swagger.io/docs/specification/authentication/bearer-authentication/)
因此,要从请求中检索令牌,我们必须:
- 首先,确保请求具有正确格式的授权标头
- 其次,将授权头按空格拆分,令牌是数组的第二个元素。
这就是第一个版本所做的。
(注意:在分割字符串之前应该检查头部是否包含空格
if(req.headers.authorization && req.headers.authorization.startsWith('Bearer ')){
token = req.headers.authorization.split(" ")[1]
}
)