У меня есть экспресс-узел nodejs, в котором есть три функции URL, в которых
1) registerUser () добавил сведения о пользователе в базу данных и предоставил JWT для вызывающей стороны
2) verifyToken ()- проверяет, является ли JWT действительным
3) getConfiguration () - если JWT проверен сверху, функция предоставляет пользователю некоторые данные конфигурации
Так что экспресс-код, который я использую для достижения этой цели,
//Routes.js
app.use(requestIp.mw())
app.route('/register')
.post(userController.registerUser);
app.use(userController.verifyToken)
app.route('/user/configuration')
.post(chayakkadaController.getConfiguration);
Теперь моя проблема - всякий раз, когда я пытаюсь вызвать URL / регистр вместо вызова функции registerUser, она вызывает verifyToken и говорит, что мой токен недействителен (я хочу, чтобы функция registerUser работала без токена, но getConfiguration должна работать толькос токеном)
Это моя функция verifyToken
export function verifyToken(req, res, next) {
var token = req.body.token || req.headers["token"];
var appData = {};
if (token) {
jwt.verify(token, process.env.SECRET_KEY, function (err, decoded) {
if (err) {
appData["status"] = 1;
appData["error"] = "Invalid Token";
res.status(500).json(appData);
} else {
req.user = decoded;
next();
}
});
} else {
appData["status"] = 1;
appData["error"] = "Need access token";
res.status(403).json(appData);
}
}
Мой регистр Код пользователя
export function registerUser(req, res) {
let userData = {
device: req.body.device,
device_version: req.body.device_version,
device_id: req.body.device_id,
app_version: req.body.app_version,
app_id: 2,
ip_address: req.headers['x-real-ip'] || req.connection.remoteAddress
}
database.query(`INSERT INTO users SET ?`, userData)
.then(result => {
let user = {
id: result.insertId
}
let token = jwt.sign(user, process.env.SECRET_KEY);
let appData = {};
appData["token"] = token;
redis.sendMessage({
qname: 'registration_queue',
message: result.insertId + '',
}, (err, resp) => {
res.status(201).json(appData);
});
})
.catch(err => {
console.log(err);
res.status(500).json("Database Error");
})
}