如何使用 nodejs 设置授权标头并表达

Posted

技术标签:

【中文标题】如何使用 nodejs 设置授权标头并表达【英文标题】:How to set authorization headers with nodejs and express 【发布时间】:2016-04-07 22:54:55 【问题描述】:

我正在按照本教程使用 nodejs、express、mongoose 和 swig 模板建立一个站点: Authenticate a Node.js API with JSON Web Tokens

在本教程中,作者使用 Postman 在标头中设置令牌。 我已经用谷歌搜索了好几天,以了解如何在我的网站标题中设置 jwt 令牌,但它对我不起作用。

【问题讨论】:

这取决于您的站点与 Express 服务器的通信方式(jQuery、Angular、React、纯 JS 等)。 感谢您的回复。该站点位于 nodejs 和 express 中。我正在为 html 使用 swig 模板。我对nodejs很陌生。我已经创建了登录页面并获得了我的令牌。现在我想将令牌存储在文件夹 /api/ 中所有站点的标题中。我尝试像这样在标头中设置令牌: app.use(function(req, res, next) res.setHeader('token', token; next(); ); 但它不起作用。跨度> 澄清一下,客户端(使用 API 的人)应该发送带有令牌的标头 - 而不是服务器(正如您根据您的问题尝试做的那样)。换句话说,您的网站应该检查标题,但客户应该发送它。希望这会有所帮助。 谢谢阿什利。我明白你的意思。我无法从 nodejs 设置标头,因为它必须来自客户端。这就是为什么我找不到解决方案。这意味着我必须找到一种将令牌放入 swig-template 的方法。对吗? @DanishWoman 在您的问题中添加更多信息!编辑您的问题! 【参考方案1】:

如果您希望客户端在其请求标头中包含令牌,您可以使用带有 express 的 cookie 解析器。 (HTML5 Web 存储是另一种选择)。关于 Cookie:

Express 可以设置响应头来告诉客户端“将令牌添加到 cookie”。

一旦客户端使用令牌设置 cookie,令牌将在每个请求的客户端请求标头中。让我们开始烘焙吧

npm install cookie-parser

洒一些

var cookieParser = require('cookie-parser')
app.use(cookieParser())

访问并设置 cookie:

app.use(function (req, res, next) 
  var cookie = req.cookies.jwtToken;
  if (!cookie) 
    res.cookie('jwtToken', theJwtTokenValue,  maxAge: 900000, httpOnly: true );
   else 
    console.log('let's check that this is a valid cookie');
    // send cookie along to the validation functions...
  
  next();
);

您可能希望使用 cookie(或最终使用的任何方法)来做这些事情:

设置 cookie 以在用户通过身份验证时保存令牌。 在允许访问受保护的之前检查 cookie 标头值 路线。 如果用户没有他们的令牌,则发回未经授权的状态 当他们尝试访问需要令牌的 api 路由时。

【讨论】:

这真的很有帮助。我将令牌设置在 cookie 中,而不是从标头请求令牌,而是从 cookie 请求它。非常感谢!!

以上是关于如何使用 nodejs 设置授权标头并表达的主要内容,如果未能解决你的问题,请参考以下文章

Nuxt / Apollo - 设置授权标头

如何设置授权标头(JWT)

如何在 NodeJS 中使用 JWT 令牌验证路由

如何在 React Native 中使用 Axios 设置授权标头

向标头添加授权并访问 [Authorize] 控制器

AngularJS 不发送授权或任何额外的键/值标头