Node.js:JWT和Express-“;无效令牌";验证时出错

Node.js:JWT和Express-“;无效令牌";验证时出错,node.js,express,jwt,Node.js,Express,Jwt,只是尝试使用Express服务器对JSON web令牌进行签名和验证的基本实现,但是“verify”函数不断返回“Invalid token”错误 当将生成的令牌从“/”路由粘贴到jwt.io调试器中时,它最初会显示“无效签名”,但当我选中“secret is base64 encoded”复选框时,调试器会验证签名,因此我尝试在签名和验证端对我的机密进行base64编码/解码,但没有任何效果 我目前正在使用名为“REST Client”的VS代码扩展名执行请求,该扩展名允许您使用“.REST”

只是尝试使用Express服务器对JSON web令牌进行签名和验证的基本实现,但是“verify”函数不断返回“Invalid token”错误

当将生成的令牌从“/”路由粘贴到jwt.io调试器中时,它最初会显示“无效签名”,但当我选中“secret is base64 encoded”复选框时,调试器会验证签名,因此我尝试在签名和验证端对我的机密进行base64编码/解码,但没有任何效果

我目前正在使用名为“REST Client”的VS代码扩展名执行请求,该扩展名允许您使用“.REST”或“.http”文件发出请求,并且我正在手动将“Bearer[token]”传递到授权标头。我还使用Postman进行了测试,收到了相同的错误。应用程序按预期通过两种方法获取标题

const express=require('express'))
const jwt=require('jsonwebtoken')
const app=express()
app.use(express.json())
应用程序获取(“/”,(请求,请求)=>{
常量用户={
用户名:“test1234”,
电邮:'test1234@gmail.com',
管理员:错
}
const secret='secret'
jwt.sign(用户,秘密,(错误,令牌)=>{
req.token=令牌
res.send(令牌)
})
})
app.get('/verify',(req,res)=>{
//持票人
const authHeader=req.headers.authorization
console.log(authHeader)
if(authHeader){
const token=authHeader.split(“”)[1]
const secret='secret'
const userData=jwt.verify(令牌,秘密)
res.send(用户数据)
}否则{
return res.send('请提供令牌')
}
})
app.listen(3000,()=>console.log('服务器正在监听http://localhost:3000 ...'))
我希望有效负载(userData)从“/verify”路由返回,但得到的是“invalid token”错误

更新
问题是,我将授权头的值用引号括起来,例如授权:“持有者[令牌]”,而它本不应该用引号括起来,例如授权:持有者[令牌]。

问题是我将授权头的值用引号括起来,例如授权:“持有者[令牌]”,当它不应该在引号中时,例如Authorization:Bearer[token]。

authHeader控制台中显示什么?@SuleymanSah“Bearer”,如变量声明上面的注释所述。我目前正在使用名为“REST Client”的VS代码扩展名执行请求,该扩展名允许您使用“.REST”或“.http”文件发出请求,并且我正在手动将“Bearer”传递到授权标头。我还使用邮递员进行了测试,得到了相同的结果。应用程序按预期通过这两种方法获取标题。我刚刚在本地尝试了这段代码,效果很好,/route在响应正文中返回令牌,我在/verify中使用该令牌作为授权标题这里是/verify route工作的屏幕截图:啊!我将Auth头的值作为字符串传递,带有单/双引号(Authorization:“Bearer”),而它本不应该有这些值(Authorization:Bearer)。现在可以了。谢谢@SuleymanSah