【问题标题】:How to set token in header after it is sent to the client发送到客户端后如何在标头中设置令牌
【发布时间】:2019-12-22 23:11:40
【问题描述】:

我在 Node JS 中进行了登录。在 Postman 中进行了测试。完美运行。 现在我需要将它集成到带有接口的客户端。在 POST API 中发送 jwt 令牌后,如何获取令牌并将其设置在客户端的标头? 或者是否可以在服务器端设置标头?这是我尝试过的。我只是不知道该怎么做。

app.post('/auth', function(request, response) {
  var username = request.body.username;
  var password = request.body.pass;

  if (username && password) {
        db.query('SELECT * FROM user WHERE username = ?', [username], function(error, results, fields) {
            if (results.length > 0) {
                bcrypt.compare(password, results[0].password, function(err, res) {
          if(res) {
            jwt.sign({id: results[0].id}, 'sdfghwertyhbvcsdfghjk', (err, token) => {
              response.json({token});
              response.setHeader('Set-Cookie', ['item1=value1']);
            });
              // response.render(__dirname + "/views/bearer.html", {sessionToken: results3[0].token});
              response.end();
          } else {
            response.send('Неправильно введены данные')
            response.end();
          }
        })
            } else {
                response.send('Неправильно введены данные');
        response.end();
            }
        });
    } else {
        response.send('Введите имя пользователя и пароль');
    response.end();
    }
});

function checkRights(request, result, next, rights) {
  try {
    var id = jwt.verify(request.headers.authorization, 'sdfghwertyhbvcsdfghjk').id;
    db.query('SELECT * FROM user WHERE id = ?', [id] , function(error, results, fields) {
      if (error) throw error;
      if(results.length == 0) return false;
      if(rights.indexOf(results[0].username) !== -1) {
        request.user = results[0];
        next()
      } else
        result.json({
          error: "You are not allowed!!!"
        });
    });
  } catch(e) {
    result.json({
      error: "Not authorized!!!"
    });
  }
}
function Authorized (request, res, next) {
  checkRights(request, res, next, ['admin']);
}

app.get('/dashboard', [Authorized], function (req, res) {
  res.send("OK");
  res.end();
});

【问题讨论】:

    标签: javascript node.js authentication session jwt


    【解决方案1】:

    jwt.io中所述

    当用户想要访问受保护的路由或资源时,用户代理应该发送 JWT,通常在 Authorization 标头中使用 Bearer 模式。标头的内容应如下所示:

    授权:承载

    如果您在服务器端设置标头,客户端仍应自行设置。

    Tutorial 关于如何在客户端 JavaScript 上使用 JWT 的视频

    【讨论】:

      猜你喜欢
      • 2021-09-11
      • 2018-05-25
      • 2021-06-27
      • 2021-06-18
      • 1970-01-01
      • 2020-11-14
      • 2020-09-05
      • 2019-02-06
      相关资源
      最近更新 更多