我正在使用Node.js + Express构建应用程序,并且我尝试使用JSON Web令牌进行身份验证。现在我处于输入有效用户名/密码的位置,服务器通过向客户端发送JWT来响应。
这是我迷路的地方。
如何将该令牌与进一步的请求一起发送到服务器?
如何将其作为标题发送?
答案 0 :(得分:2)
如何将该令牌与进一步的请求一起发送到服务器?
http://localhost:8080/api/users?token=tokenValue
document.cookie
在Cookie中保存令牌如何将其作为标题发送?
使用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并在中间件中验证它或使用会话