我按照下面的例子创建了一个api:https://github.com/eXtremeXR/APIAuthenticationWithNode (除非我使用mysql)。当我通过邮递员测试它时,它工作得很好。
现在..。。我想知道其他人如何正确使用/消费此api。到目前为止,我所拥有的是:
所以我有两个请求。第一个获取令牌:
第一个请求
const request = require("request");
request.post({
headers: { "content-type": "application/json" },
url: "http://127.0.0.1:2001/abc/login",
body: JSON.stringify({
email: "test@abc.it",
password: "sisw9234&"
})
}, (error, response, body) => {
if(error) {
return console.dir(error);
}
console.log(JSON.parse(body).token);
});
..。第二个...当我用实际的令牌替换myToken时...为我提供请求的json:
第二个请求
const request = require("request");
var token = 'myToken';
var auth = 'Bearer '+token;
request.get({
headers: {
"authorization": auth
},
url: "http://127.0.0.1:2001/abc/search?name=peter"
}, (error, response, body) => {
if(error) {
return console.dir(error);
}
console.log(JSON.parse(body));
});
我如何正确地组合它们呢?
另外..。到目前为止,令牌的有效期仅为360秒。处理这种情况最好的方法是什么?有效令牌、登录的持续时间...?
发布于 2018-08-08 14:25:02
我认为token在后台没有正确签名。
JWT.sign的正确用法是
jwt.sign(payload, secretOrPrivateKey, [options, callback])
signToken = user => {
return JWT.sign({
iss: 'CodeWorkr',
sub: user.id,
iat: new Date().getTime(), // current time
// exp: new Date().setDate(new Date().getDate() + 1) // current time + 1 day ahead
}, JWT_SECRET, {
expiresIn: 3600 // 1 hr = 3600s
});
}
正如您所看到的,您应该在有效负载中的JWT_SECRET之后传递expiresIn
选项,而不是exp
(以避免日期计算)。
如果您想验证令牌是否过期,唯一的方法是在服务器端验证它。
要再次使用此令牌,您需要将其保存到localStorage
,并在需要时使用它。
localStorage.setItem('token', token)
const token = localStorage.getItem('token') // use this token
发布于 2018-08-08 07:31:17
如果我理解正确的话,您的第一个请求从您的服务器获得一个令牌,然后您在第二个请求上使用该令牌来搜索peter,并且您希望组合这些请求。
这类事情的standard practice就是像你一样保持请求的分离,所以我建议不要组合它们。
关于令牌的有效期只有360秒,我假设您有权访问服务器代码,因为您正在向localhost发送请求,因此您需要在本地修改令牌的过期时间。
https://stackoverflow.com/questions/51735657
复制相似问题