一旦我生成了JSON Web Token,我该如何使用它? (Node.js的)

时间:2016-05-12 04:53:51

标签: node.js express jwt

我正在使用Node.js + Express构建应用程序,并且我尝试使用JSON Web令牌进行身份验证。现在我处于输入有效用户名/密码的位置,服务器通过向客户端发送JWT来响应。

这是我迷路的地方。

如何将该令牌与进一步的请求一起发送到服务器?

如何将其作为标题发送?

3 个答案:

答案 0 :(得分:2)

  

如何将该令牌与进一步的请求一起发送到服务器?

  1. 您可以在req网址中附加查询参数。 的例如
  2. http://localhost:8080/api/users?token=tokenValue

    1. 您可以将其保存在Cookie中,当您需要网址时,它会获取包含您的令牌的Cookie。使用document.cookie在Cookie中保存令牌
    2.   

      如何将其作为标题发送?

      使用JQuery

      $.ajax({
          type:"POST",
          beforeSend: function (request)
          {
              request.setRequestHeader("Authority", authorizationToken);
          },
          url: "entities",
          data: "",
          success: function(msg) {
          }
      });
      

      在服务器端,您可以执行以下操作:

      var token = req.body.token || req.query.token || req.headers['x-access-token'];
      

      对于Cookie解析,您可以使用:Cookie-Parser

      var app = express()
      app.use(cookieParser())
      
      app.get('/', function(req, res) {
        console.log("Cookies: ", req.cookies)
      })
      

      进一步阅读: https://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web-tokens

答案 1 :(得分:1)

客户端可以将访问令牌设置为标头或查询参数,也可以设置在请求正文中。以下是通过标题发送的方式:

$.ajax({
    url: 'foo/bar',
    headers: { 'x-access-token': 'some value' },
    data: {}
}).done(function(result){
   //do something
});

最佳做法是将访问令牌保存在浏览器本地存储中而不是cookie中。一旦记录它就获得令牌。

服务器,在所有安全路由上包含身份验证中间件的最佳方式,其中需要令牌。

<强> auth.middleware:

'use strict';

module.exports = function(req,res,next){
    const jwt = require('jsonwebtoken');
    const config = require('../config/config');

    // check header or url parameters or post parameters for token
    var token = req.body.token || req.query.token || req.headers['x-access-token'];

    // decode token
    if (token) {

        // verifies secret and checks exp
        jwt.verify(token, config.secret, function(err, decoded) {           
            if (err) {
                return res.status(401).json({ success: false, message: 'Failed to authenticate token.' });      
            } else {
                // if everything is good, save to request for use in other routes
                req.decoded = decoded;  
                next();
            }
        });

    } else {

        // if there is no token
        // return an error
        return res.status(403).send({ 
            success: false, 
            message: 'No token provided.'
        });

    }

};

<强>路由

//no token required
app.post('/signup',users.create);

app.post('/login',users.authenticate);

const auth = require('../middleware/auth.middleware');
//token required for below routes
app.use(auth);    
app.get('/info',index.getInfo);

答案 2 :(得分:1)

首先你需要使用http cookie(res.cookie(“token”,“yourtoken”))或使用session

在客户端设置json令牌

当用户发送请求时,您需要将令牌发送到服务器。您可以使用req.cookie.token读取cookie并在中间件中验证它或使用会话