#javascript #node.js #authentication #cookies #fetch-api
Вопрос:
Я внедрил систему входа в систему с Node.js который помещает файл cookie в браузер клиента после успешной аутентификации. Этот файл cookie содержит имя пользователя клиента, которое позже потребуется для извлечения информации о клиенте из базы данных, я пытаюсь отправить этот файл cookie на сервер моего узла с запросом API выборки, а затем прочитать имя пользователя на стороне сервера, но это возвращается undefined
. Вот моя система входа в систему:
var cookie_parser = require('cookie-parser');
app.use(cookie_parser('mysecretkey'));
app.post('/login', function(req, res) {
var loginCredentials = {
Email: req.body.email,
Password: req.body.password,
}
loginCredentials.Password = hashPassword(loginCredentials.Password);
console.log(loginCredentials);
CheckPassword(loginCredentials, returnResult);
// Function used by login API method to fetch password hash by email address from database
function CheckPassword(loginCredentials, callback) {
con.query("SELECT Password FROM Customers WHERE Email =?", loginCredentials.Email, function(err, result) {
if (!err) {
callback(false, result);
} else {
callback(true, err);
}
})
}
// Function for returning the login result
// if login is successful, redirect user to front page
function returnResult(error, result) {
if (error) {
res.send(`Database error: ${result}`);
} else {
if (result.length > 0 amp;amp; loginCredentials.Password == result[0].Password) {
res.cookie('user', loginCredentials.Email, {signed: true});
res.redirect("http://localhost:3000/");
} else {
res.send("Login failed: incorrect email or password");
}
}
}
});
Затем я пытаюсь прочитать имя пользователя из этого файла cookie:
app.get('/getCustomerInfo', function (req, res) {
var username = req.signedCookies.user;
console.log(username); // prints undefined
if (username == undefined) {
res.send('You are not logged in. Log in to place the order');
} else {
con.query("SELECT FirstName, LastName, Address, Email, Phone FROM Customers WHERE Email =?", username, function(err, result) {
if (!err) {
console.log(result);
res.send(result);
} else {
console.log(err);
}
});
}
});
Вот мой запрос на получение API:
function GetCustomerInfo() {
fetch(`http://127.0.0.1:5000/getCustomerInfo`, {
method: 'GET',
credentials: 'include'
})
.then((response) => response.json())
.then((response) => {
setCustomerInfo(response);
})
.catch((error) => {
console.error(error);
});
return (
<div>
<h2>
{customerInfo}
</h2>
</div>
);
}
Что я делаю не так? Любые советы будут высоко оценены.
Комментарии:
1. Похоже, вы не используете анализатор файлов cookie. Можете ли вы добавить app.js код здесь?
2. Я импортирую его на стороне сервера, например: var cookie_parser = требуется(«анализатор файлов cookie»);
3.
credentials: "same-origin"
4. Добавьте код в вопрос, в который вы добавляете это и другое промежуточное программное обеспечение.
5. Кроме того, вы не должны использовать электронное письмо в качестве идентификатора файла cookie. Его можно легко подделать. Вместо этого используйте случайно сгенерированный хэш.