在标头中传递 JWT
Posted
技术标签:
【中文标题】在标头中传递 JWT【英文标题】:Pass JWT in Header 【发布时间】:2018-06-26 05:13:16 【问题描述】:我正在使用 NodeJs 学习 JWT。我被困在通过标头中的 JWT 实际上我不知道该怎么做。
index.js 文件
var express = require('express'),
app = express(),
routes = require('./routes'),
bodyParser = require('body-parser'),
path = require('path'),
ejs = require('ejs'),
jwt = require('jsonwebtoken');
app.use(bodyParser.urlencoded( extended: false ));
app.use(bodyParser.json());
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.post('/home',routes.loginUser);
app.get('/', function(req, res)
res.render('index');
);
app.get('/home',function(req, res)
jwt.verify(req.token, 'qwertyu6456asdfghj', function(err, data)
if (err)
res.sendStatus(403);
);
);
app.listen(3000,function()
console.log("Server running at Port 3000");
);
路由/index.js 文件
var jwt = require('jsonwebtoken');
exports.home = function(req, res)
res.render('home',error: false);
;
exports.loginUser = function(req, res)
var uname = req.body.Username;
var pwd = req.body.Password;
if(uname && pwd === 'admin')
res.render('home');
var token = jwt.sign( user: uname , 'qwertyuiopasdfghj');
console.log('Authentication is done successfully.....');
console.log(token);
response.json(
authsuccess: true,
description: 'Sending the Access Token',
token: token
);
;
当我运行应用程序时,我在console.log
中获取令牌,但是
如何在 header 中传递令牌并将其存储在浏览器的 localStorage 中?
【问题讨论】:
这发生在客户端。你是从网络上调用你的快递应用程序吗?安卓? ios?每个客户端都需要处理令牌并将其作为以下标头附加到请求:“Authorization”:“Bearerres.json( authsuccess: true, description: 'Sending the Access Token', token: token );
发送响应时,我收到此错误 -> Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
这是因为你不能在 'resposnse.render' 之后使用 'respinse.json()'。您只能回复一次。此错误与 JWT 无关
【参考方案1】:
所以你想将令牌发送到前端而不是正文。
推荐的方法是使用 cookie。可以在cookie中设置token,可以在前端和后端自动访问。
res.cookie('tokenKey', 'ajsbjabcjcTOKENajbdcjabdcjdc');
使用授权标头也是一个好方法,但同样,在前端,您必须从标头中获取令牌,然后保存在 localStorage 或 cookie 中,如果使用 cookie,则不必这样做。
res.header(field [, value]);
【讨论】:
谢谢,但我在一周前通过res.cookie('auth',token);
解决了这个问题。
对不起!它没有标记为已回答,所以我想提供一些帮助。 NVM【参考方案2】:
正如@ChicoDelaBarrio 告诉您的,这取决于客户。 Postman 是开始检查后端的好地方。但是在你的服务器工作之后,你必须开始在你的客户端工作。
如果你想要一个关于 Node.js 中 JWT 的完整后端示例,包括 Refresh 令牌,我向你推荐这篇文章:Refresh token with JWT authentication in Node.js 可能您可以重用大部分代码。在这种情况下,header 不是用 BEARER 创建的,而是在开头用 JWT 创建的,但它的工作原理是一样的
【讨论】:
谢谢,我会调查的。以上是关于在标头中传递 JWT的主要内容,如果未能解决你的问题,请参考以下文章