首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用jwt-webtoken & request使用远程api

使用jwt-webtoken & request使用远程api
EN

Stack Overflow用户
提问于 2018-08-08 05:26:17
回答 2查看 781关注 0票数 0

我按照下面的例子创建了一个api:https://github.com/eXtremeXR/APIAuthenticationWithNode (除非我使用mysql)。当我通过邮递员测试它时,它工作得很好。

现在..。。我想知道其他人如何正确使用/消费此api。到目前为止,我所拥有的是:

所以我有两个请求。第一个获取令牌:

第一个请求

代码语言:javascript
复制
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:

第二个请求

代码语言:javascript
复制
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秒。处理这种情况最好的方法是什么?有效令牌、登录的持续时间...?

EN

回答 2

Stack Overflow用户

发布于 2018-08-08 14:25:02

我认为token在后台没有正确签名。

JWT.sign的正确用法是

jwt.sign(payload, secretOrPrivateKey, [options, callback])

代码语言:javascript
复制
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,并在需要时使用它。

代码语言:javascript
复制
localStorage.setItem('token', token)
const token = localStorage.getItem('token') // use this token
票数 1
EN

Stack Overflow用户

发布于 2018-08-08 07:31:17

如果我理解正确的话,您的第一个请求从您的服务器获得一个令牌,然后您在第二个请求上使用该令牌来搜索peter,并且您希望组合这些请求。

这类事情的standard practice就是像你一样保持请求的分离,所以我建议不要组合它们。

关于令牌的有效期只有360秒,我假设您有权访问服务器代码,因为您正在向localhost发送请求,因此您需要在本地修改令牌的过期时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51735657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档