Файлы cookie, не отправляемые Fetch API

#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. Его можно легко подделать. Вместо этого используйте случайно сгенерированный хэш.