我正在创建一个应用程序,它将在Node.js上与MySQL一起创建用户会话。
我遵循了下面链接的教程,但是在使用JWT令牌时遇到了麻烦。
如果我通过邮递员发出POST /注册请求,则会收到“请发送令牌”错误。我通过搜索检查了标题,但未选中“标题”列表中的“我的授权”。
我只是按照教程学习,很遗憾它无法正常工作。
Routes / Users.js
var express = require('express');
var users = express.Router();
var database = require('../Database/database');
var cors = require('cors')
var jwt = require('jsonwebtoken');
var token;
users.use(cors());
process.env.SECRET_KEY = "devesh";
users.post('/register', function(req, res) {
var today = new Date();
var appData = {
"error": 1,
"data": ""
};
var userData = {
"first_name": req.body.first_name,
"last_name": req.body.last_name,
"email": req.body.email,
"password": req.body.password,
"created": today
}
database.connection.getConnection(function(err, connection) {
if (err) {
appData["error"] = 1;
appData["data"] = "Internal Server Error";
res.status(500).json(appData);
} else {
connection.query('INSERT INTO users SET ?', userData, function(err, rows, fields) {
if (!err) {
appData.error = 0;
appData["data"] = "User registered successfully!";
res.status(201).json(appData);
} else {
appData["data"] = "Error Occured!";
res.status(400).json(appData);
}
});
connection.release();
}
});
});
users.post('/login', function(req, res) {
var appData = {};
var email = req.body.email;
var password = req.body.password;
database.connection.getConnection(function(err, connection) {
if (err) {
appData["error"] = 1;
appData["data"] = "Internal Server Error";
res.status(500).json(appData);
} else {
connection.query('SELECT * FROM users WHERE email = ?', [email], function(err, rows, fields) {
if (err) {
appData.error = 1;
appData["data"] = "Error Occured!";
res.status(400).json(appData);
} else {
if (rows.length > 0) {
if (rows[0].password == password) {
let token = jwt.sign(rows[0], process.env.SECRET_KEY, {
expiresIn: 1440
});
appData.error = 0;
appData["token"] = token;
res.status(200).json(appData);
} else {
appData.error = 1;
appData["data"] = "Email and Password does not match";
res.status(204).json(appData);
}
} else {
appData.error = 1;
appData["data"] = "Email does not exists!";
res.status(204).json(appData);
}
}
});
connection.release();
}
});
});
users.post('/login', function(req, res) {
var appData = {};
var email = req.body.email;
var password = req.body.password;
database.connection.getConnection(function(err, connection) {
if (err) {
appData["error"] = 1;
appData["data"] = "Internal Server Error";
res.status(500).json(appData);
} else {
connection.query('SELECT * FROM users WHERE email = ?', [email], function(err, rows, fields) {
if (err) {
appData.error = 1;
appData["data"] = "Error Occured!";
res.status(400).json(appData);
} else {
if (rows.length > 0) {
if (rows[0].password == password) {
token = jwt.sign(rows[0], process.env.SECRET_KEY, {
expiresIn: 5000
});
appData.error = 0;
appData["token"] = token;
res.status(200).json(appData);
} else {
appData.error = 1;
appData["data"] = "Email and Password does not match";
res.status(204).json(appData);
}
} else {
appData.error = 1;
appData["data"] = "Email does not exists!";
res.status(204).json(appData);
}
}
});
connection.release();
}
});
});
users.use(function(req, res, next) {
var token = req.body.token || req.headers['token'];
var appData = {};
if (token) {
jwt.verify(token, process.env.SECRET_KEY, function(err) {
if (err) {
appData["error"] = 1;
appData["data"] = "Token is invalid";
res.status(500).json(appData);
} else {
next();
}
});
} else {
appData["error"] = 1;
appData["data"] = "Please send a token";
res.status(403).json(appData);
}
});
users.get('/getUsers', function(req, res) {
var appData = {};
database.connection.getConnection(function(err, connection) {
if (err) {
appData["error"] = 1;
appData["data"] = "Internal Server Error";
res.status(500).json(appData);
} else {
connection.query('SELECT *FROM users', function(err, rows, fields) {
if (!err) {
appData["error"] = 0;
appData["data"] = rows;
res.status(200).json(appData);
} else {
appData["data"] = "No data found";
res.status(204).json(appData);
}
});
connection.release();
}
});
});
module.exports = users;
Server.js
var express = require('express');
var cors = require('cors');
var bodyParser = require("body-parser");
var app = express();
var port = process.env.PORT || 3000;
app.use(bodyParser.json());
app.use(cors());
app.use(bodyParser.urlencoded({
extended: false
}));
var Users = require('./Routes/Users');
app.use('/users',Users);
app.listen(port,function(){
console.log("Server is running on port: "+port);
});
邮递员标题
答案 0 :(得分:0)
下面是我的代码。我正在使用axios
export function Post(url, data) {
const authHeader = initAuthHeaders();
const config = {
headers: {
Authorization: "Bearer " + authHeader
}
};
return axios.post(url, data, config);
}
可以找到完整的源代码here
答案 1 :(得分:0)
答案 2 :(得分:0)
这可能对您有帮助
middleware.loadUser= (req, res, next) => {
const { headers } = req;
if (_.isEmpty(headers.authorization)) {
//auth error
} else {
const decoded = jwt.decodeAuthToken(headers.authorization.replace('Bearer ', ''));
if (decoded) {
User.findOne({ _id: decoded.id })
.then((user) => {
if (user) {
} else {
}
})
.catch((err) => {
});
req.user = decoded;
} else {
}
}
};