Я пытаюсь завершить вход в систему jwt. Я пытаюсь создать токен jwt в логине. Затем я пытаюсь использовать его в своем маршруте вопросов к пользователю.
Я использую интерфейсную часть реагирования.
Это правильный способ сделать это?
В настоящее время я получаю сообщение об ошибке
const token = req.cookies.auth;
[0] ^
[0]
[0] ReferenceError: req is not defined
Ниже приведен код входа в мои маршруты, который назначает токен, как только сервер my sql возвращает значения электронной почты и пароля. Пользователь-вопросы пытается использовать этот JWT. и я также включил, как токен проверяется в функции
Verfiy пользователей
app.get("/user-questions", verifyToken, function(req, res) {
app.use(function(req, res, next) {
// decode token
if (token) {
jwt.verify(token, "secret", function(err, token_data) {
if (err) {
console.info("token did not work");
return res.status(403).send("Error");
} else {
req.user_data = token_data;
sql.connect(config, function(err) {
if (err) console.log(err);
// create Request object
var request = new sql.Request();
// query to the database and get the records
request.execute("dbo.ViewQuestions", function(err, recordset) {
if (err) console.log(err);
// send records as a response
res.json(recordset);
next();
});
});
}
});
} else {
console.info("no token");
console.log("no token");
return res.status(403).send("No token");
}
});
});
Маршрут входа
app.post("/login", async (req, response) => {
try {
await sql.connect(config);
var request = new sql.Request();
var Email = req.body.email;
var Password = req.body.password;
console.log({ Email, Password });
request.input("Email", sql.VarChar, Email);
request.input("Password", sql.VarChar, Password);
var queryString =
"SELECT * FROM TestLogin WHERE email = @Email AND password = @Password";
//"SELECT * FROM RegisteredUsers WHERE email = @Email AND Password = HASHBYTES('SHA2_512', @Password + 'skrrt')";
const result = await request.query(queryString);
if (result.recordsets[0].length > 0) {
console.info("/login: login successful..");
console.log(req.body);
token = jwt.sign(
{ Email },
"secretkey",
{ expiresIn: "30s" },
(err, token) => {
res.json({
token
});
res.cookie("auth", token);
res.send("ok");
}
);
} else {
console.info("/login: bad creds");
response.status(400).send("Incorrect email and/or Password!");
}
} catch (err) {
console.log("Err: ", err);
response.status(500).send("Check api console.log for the error");
}
});
Проверка пользователей
// Verify Token
function verifyToken(req, res, next) {
// Get auth header value
const bearerHeader = req.headers["authorization"];
// Check if bearer is undefined
if (typeof bearerHeader !== "undefined") {
// Split at the space
const bearer = bearerHeader.split(" ");
// Get token from array
const bearerToken = bearer[1];
// Set the token
req.token = bearerToken;
// Next middleware
next();
} else {
// Forbidden
res.sendStatus(403);
}
}
Пожалуйста, сообщите, если это в теории должно работать. И если нет, пожалуйста, посоветуйте, как решить.
РЕДАКТИРОВАТЬ:
Ошибка была устранена, однако теперь просто мои токены jwt не работают. Как при входе в систему, когда я вручную перенаправляю на вопросы пользователя, он не загружает компонент, а в консоли появляется сообщение 403 недоступно (это устанавливается в коде, когда токен jwt не работает).
ОБНОВЛЕНИЕ :
Как бы я включил
['authorization'] = 'Bearer ' + token;
в
handleSubmit(e) {
e.preventDefault();
if (this.state.email.length < 8 || this.state.password.length < 8) {
alert(`please enter the form correctly `);
} else {
const data = { email: this.state.email, password: this.state.password };
fetch("/login", {
method: "POST", // or 'PUT'
headers: {
Accept: "application/json, text/plain, */*",
"Content-Type": "application/json",
},
body: JSON.stringify(data)
})
// .then(response => response.json())
.then(data => {
console.log("Success:", data);
})
.catch(error => {
console.error("Error:", error);
});
}
}