Node.js JWT和nodejs在登录后返回无效令牌作为响应
我正在使用nodejs/express和expressjwt模块。 这是涉及的服务器代码:Node.js JWT和nodejs在登录后返回无效令牌作为响应,node.js,angular,express,express-jwt,Node.js,Angular,Express,Express Jwt,我正在使用nodejs/express和expressjwt模块。 这是涉及的服务器代码: async function authenticate({ username, password }) { const user = await User.findOne({ username }); if (user && bcrypt.compareSync(password, user.hash)) { if(user.accountActive =
async function authenticate({ username, password }) {
const user = await User.findOne({ username });
if (user && bcrypt.compareSync(password, user.hash)) {
if(user.accountActive === true) {
const {hash, ...userWithoutHash} = user.toObject();
const token = jwt.sign({sub: user.id}, config.secret, { expiresIn: '1h' });
console.log(token)
return {
...userWithoutHash, token
};
} else {
throw 'Your account is pending approval.'
}
}
}
function jwt() {
const secret = config.secret;
return expressJwt({ secret, isRevoked }).unless({
path: [
// public routes that don't require authentication
'/users/authenticate',
'/users/register',
]
});
}
每当我试图调用应用程序中的任何api时,我都会收到{message:“Invalid Token”}消息:“Invalid Token”
这是请求头:令牌不会添加到请求头中
如果本地存储上有jwt令牌,我会添加授权头
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const currentUser = JSON.parse(localStorage.getItem('currentUser'));
if (currentUser && currentUser.token) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${currentUser.token}`
}
});
}
return next.handle(request);
}
下面是登录后的身份验证登录会话请求示例
它看起来像是jwt令牌,即使它是有效的,但在登录后它将变得无效。
对我来说,这似乎是一个象征性的问题,但我不知道问题到底出在哪里
N.B我终于找到了问题所在,我没有将jwt拦截器添加到我的app.module中
通过将下面的代码添加到提供者,为我修复了它:
{ provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true },
这意味着对于我提供的令牌,将使用多个值(或类)
angular cli:8.3.0
节点:10.16
快递:4.17.1
express jwt:5.3.1您是否在头中传递授权令牌,格式如下
authorization:Bearer
?如果本地存储中可用,我将使用jwt令牌添加授权头。我更新了上面的问题并添加了拦截器。您是否检查了令牌是否真的添加到了头中?您可以在控制台的“网络”选项卡中进行检查。config.secret值是如何设置的?您还可以在vscode中附加一个调试器,以便逐行调试代码。@NS23在config.json上有两个字符串,即连接字符串和密码{“connectionString”:“server**”,“secret”:“sharedddd secret”}
{ provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true },