gpt4 book ai didi

javascript - JWT 不解码 "JWT malformed"- Node Angular

转载 作者:搜寻专家 更新时间:2023-10-31 23:31:30 26 4
gpt4 key购买 nike

登录后,我向客户端发送一个 JSON 网络 token 。我有一个自定义的 authInterceptor,它将 JSON 网络 token 发送回服务器端。

当我登录时,一切正常。转到不同的子页面,效果很好。这是因为我有一个功能可以检查 Passport 身份验证或 token 身份验证,并且在登录 Passport 身份验证时有效。

当我关闭浏览器并返回站点时,JWT 无法解码。将 JWT 放在编码函数的正下方时,它可以解码。我已经尝试了 jwt-simple Node 模块和 jsonwebtoken Node 模块,但我返回同样的错误。

这是我的自定义函数,用于检查有效 token :

function checkAuthentication(req, res, next){
if (!req.headers.authorization) {
return res.status(401).send({ message: 'Please make sure your request has an Authorization header' });
}
console.log("Here");
var token = req.headers.authorization.split('.')[1];
console.log(token);
console.log(config.secret);
var payload = null;
try {
console.log("And here....");
payload = jwt.decode(token, config.secret);
console.log(payload);
}
catch (err) {
console.log(err);
return false;
}

if (payload.exp <= moment().unix()) {
return false;
}
req.user = payload.sub;
return true;
}

jwt-simple使用jwt.encode()jwt.decode,jsonwebtoken使用jwt.sign() jwt.verify()。这是我在控制台中得到的:

Here
eyJzdWIiOiI1NmEyZDk3MWQwZDg2OThhMTYwYTBkM2QiLCJleHAiOjE0NTYxOTEyNzQsImlhdCI6MTQ1NTMyNzI3NH0
VerySecretPhrase
And here....
{ [JsonWebTokenError: jwt malformed] name: 'JsonWebTokenError', message: 'jwt malformed' }

这是客户端的authInterceptor。我收集 token 并将其设置在请求 header 中:

app.factory('httpInterceptor', function($q, $store, $window) {
return {
request: function (config){
config.headers = config.headers || {};
if($store.get('token')){
var token = config.headers.Authorization = 'Bearer ' + $store.get('token');
}
return config;
},
responseError: function(response){
if(response.status === 401 || response.status === 403) {
$window.location.href = "http://localhost:3000/login";
}
return $q.reject(response);
}
};
});

最佳答案

很高兴你明白了!对于后代来说,问题如下:一个 JWT 由三个组件组成,一个 header 、有效负载和签名 ( a good, thorough explanation can be found in this toptal post ),因此当您将 JWT 拆分为具有 var token = req 的组件时。 headers.authorization.split('.'),您分配给 token 的值仅指负载,而不是完整的 JWT。

因为 jwt-simple 解码方法需要完整的 token ,而您只给它提供要评估的有效负载,所以您的代码触发了“jwt 格式错误”错误。在您的情况下,由于您在 Authorization header 中在 token 之前使用 Bearer ,您可以使用 var token = req.headers.authorization.split(' ') 相反。

关于javascript - JWT 不解码 "JWT malformed"- Node Angular,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35375215/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com