如何在nodejs中请求页面时设置headers?
How to set headers while requesting a page in nodejs?
我看过很多关于 jwt 身份验证的教程,但每个视频制作者都使用 Postman 来显示正在发生的事情,他们在 headers 部分传递 header,同时在 URL 中请求 URL邮差。我试着用 JavaScript 来做,但我做不到。
我想进行 jwt 身份验证,但在生成令牌后,我将其发送到客户端以用于进一步的请求,但在尝试几次后我没有这样做。我也尝试在服务器端设置 req.headers 但它没有做我想做的事..
我想为令牌生成后的每个请求设置请求 header 以验证表单 "Bearer {token}"。用JS怎么办??
我最担心的是每个教程都是用邮递员做的,但他们没有展示他们是如何在自己的应用程序中实现它的。我希望我的问题很清楚。
类似的东西:
$.ajax({
url: url,
beforeSend: function(xhr) {
xhr.setRequestHeader("custom_header", "value");
},
success: function(data) {
}
});
您可以像那样在您的 http 请求中轻松添加 header
这里已经解决了Node.JS: How to send headers with form data using request module
首先使用 npm 安装 jwt 和 express 框架,然后制作一个中间件文件,该文件将检查是否设置了 tokek。
Middleware.js :
let jwt = require('jsonwebtoken');
const config = require('./config.js');
let checkToken = (req, res, next) => {
let token = req.headers['authorization']; // Express headers are auto converted to lowercase
if (token) {
if (token.startsWith('Bearer ')) { // Checks if it contains Bearer
// Remove Bearer from string
token = token.slice(7, token.length); //Separate Bearer and get token
}
jwt.verify(token, config.secret, (err, decoded) => { //Inser the token and verify it.
if (err) {
return res.json({
status: false,
message: 'Token is not valid'
});
} else {
req.decoded = decoded;
next();
}
});
} else {
return res.json({
status: false,
message: 'Access denied! No token provided.'
});
}
};
接下来,创建一个包含机密的配置文件。
配置 js:
module.exports = {
secret: 'worldisfullofdevelopers'
};
最后,创建一个令牌路由,它将创建您的令牌,之后其余调用将针对该令牌进行身份验证。
Index.js :
const middleware = require('./middleware');
const jwt = require("jsonwebtoken");
const config = require('./config.js');
//Call token Route
app.use('/token', (req, res, next) => {
//Generate Token
let token = jwt.sign({ username: "test" },
config.secret,
{
expiresIn: '1h' // expires in 1 hours
}
);
//Send Token
res.json({
success: true,
message: 'Authentication successful!',
token: token
});
});
//Add Authentication to all routes
app.use(middleware.checkToken);
//===> All the routes after middleware will be checked for token
app.use('/getUser', (req, res, next) => {;
console.log('do something')
});
在普通 nodejs 中:
const uri = "http://example.com";
const options = {
headers: {
"Authorization": "Bearer ...."
}
}
// require http/https lib
let req = require("http").request(uri, options, (res) => {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.once("end", () => {
// concat body chunks
let body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.on("error", (err) => {
console.log(err);
});
req.end();
https://nodejs.org/dist/latest-v12.x/docs/api/http.html#http_http_request_options_callback
如果我没理解错的话,您想在客户端设置 HTTP header,以便将身份验证令牌传递给服务器。我建议您使用像 **axios* 这样的库。
使用 axios,收到令牌后,使用以下代码行为每次传出通信设置 header:
axios.defaults.headers.common['Authorization'] = "Bearer " + token;
这会将身份验证 http header 设置为您需要的形式。
我看过很多关于 jwt 身份验证的教程,但每个视频制作者都使用 Postman 来显示正在发生的事情,他们在 headers 部分传递 header,同时在 URL 中请求 URL邮差。我试着用 JavaScript 来做,但我做不到。
我想进行 jwt 身份验证,但在生成令牌后,我将其发送到客户端以用于进一步的请求,但在尝试几次后我没有这样做。我也尝试在服务器端设置 req.headers 但它没有做我想做的事..
我想为令牌生成后的每个请求设置请求 header 以验证表单 "Bearer {token}"。用JS怎么办??
我最担心的是每个教程都是用邮递员做的,但他们没有展示他们是如何在自己的应用程序中实现它的。我希望我的问题很清楚。
类似的东西:
$.ajax({
url: url,
beforeSend: function(xhr) {
xhr.setRequestHeader("custom_header", "value");
},
success: function(data) {
}
});
您可以像那样在您的 http 请求中轻松添加 header
这里已经解决了Node.JS: How to send headers with form data using request module
首先使用 npm 安装 jwt 和 express 框架,然后制作一个中间件文件,该文件将检查是否设置了 tokek。
Middleware.js :
let jwt = require('jsonwebtoken');
const config = require('./config.js');
let checkToken = (req, res, next) => {
let token = req.headers['authorization']; // Express headers are auto converted to lowercase
if (token) {
if (token.startsWith('Bearer ')) { // Checks if it contains Bearer
// Remove Bearer from string
token = token.slice(7, token.length); //Separate Bearer and get token
}
jwt.verify(token, config.secret, (err, decoded) => { //Inser the token and verify it.
if (err) {
return res.json({
status: false,
message: 'Token is not valid'
});
} else {
req.decoded = decoded;
next();
}
});
} else {
return res.json({
status: false,
message: 'Access denied! No token provided.'
});
}
};
接下来,创建一个包含机密的配置文件。
配置 js:
module.exports = {
secret: 'worldisfullofdevelopers'
};
最后,创建一个令牌路由,它将创建您的令牌,之后其余调用将针对该令牌进行身份验证。
Index.js :
const middleware = require('./middleware');
const jwt = require("jsonwebtoken");
const config = require('./config.js');
//Call token Route
app.use('/token', (req, res, next) => {
//Generate Token
let token = jwt.sign({ username: "test" },
config.secret,
{
expiresIn: '1h' // expires in 1 hours
}
);
//Send Token
res.json({
success: true,
message: 'Authentication successful!',
token: token
});
});
//Add Authentication to all routes
app.use(middleware.checkToken);
//===> All the routes after middleware will be checked for token
app.use('/getUser', (req, res, next) => {;
console.log('do something')
});
在普通 nodejs 中:
const uri = "http://example.com";
const options = {
headers: {
"Authorization": "Bearer ...."
}
}
// require http/https lib
let req = require("http").request(uri, options, (res) => {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.once("end", () => {
// concat body chunks
let body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.on("error", (err) => {
console.log(err);
});
req.end();
https://nodejs.org/dist/latest-v12.x/docs/api/http.html#http_http_request_options_callback
如果我没理解错的话,您想在客户端设置 HTTP header,以便将身份验证令牌传递给服务器。我建议您使用像 **axios* 这样的库。
使用 axios,收到令牌后,使用以下代码行为每次传出通信设置 header:
axios.defaults.headers.common['Authorization'] = "Bearer " + token;
这会将身份验证 http header 设置为您需要的形式。