Express не удалось сохранить cookie

#javascript #node.js #express #cookies #session-cookies

#javascript #node.js #экспресс #файлы cookie #сеансовые файлы cookie

Вопрос:

Я пытаюсь сохранить сеанс входа в систему в файл cookie, когда пользователь входит в систему через имя пользователя / паспорт, чтобы сервер знал, что пользователь вошел в систему. Но cookie никогда не будет установлен.

Вот соответствующий код:

index.js:

 if (process.env.NODE_ENV !== 'production') {
    require("dotenv").config();
}

const express = require("express");
const bodyParser = require("body-parser");

const app = express();
app.use(bodyParser.json({ limit: "16mb", extended: true }));
app.use(bodyParser.urlencoded({ extended: true, limit: "16mb" }));

const session = require("express-session");
app.use(
  session({
    secret: "thisIsMySecretMessageHowWillYouGuessIt",
    resave: true,
    saveUninitialized: true,
    cookie: {
        sameSite: 'none',
        httpOnly: true,
        secure: true
    },
  })
);

const passport = require("passport");
app.use(passport.initialize());
app.use(passport.session());

const cookieParser = require("cookie-parser");
app.use(cookieParser());

const cors = require("cors");

const whitelist = env.process.CLIENT_URL;
app.use(cors({ origin: whitelist, credentials: true }));
  

auth.js:

 const cookieKey = "sid";
const md5 = require("md5");
const bcrypt = require("bcrypt");
const redis = require("redis");
const client = redis.createClient(process.env.REDIS_URL);
const cookieOption = { maxAge: 3600 * 1000, httpOnly: true, sameSite: 'none', secure: true};

login = async (req, res) => {
    const sessionKey = md5(
      getSecretMessage()   new Date().getTime()   user.username
    );

    client.hmset("sessions", sessionKey, JSON.stringify(user), function(err) {
      if (err) throw err;
    });

    // this sets a cookie
    res.cookie(cookieKey, sessionKey, cookieOption);   // expire after 60 mins

    res.send({ username: user.username, result: "success" });
};

isLoggedIn = async (req, res, next) => {
  if (
    (req.cookies === undefined || req.cookies[cookieKey] === undefined) amp;amp;
    !req.isAuthenticated()
  ) {
    res.sendStatus(401);
    return;
  }
};

  

Запрос.cookies [‘sid’] всегда будет неопределенным, поэтому сервер вернет статус 401.

Для клиента react для «учетных данных» установлено значение «включить».

Вещи, которые я пробовал:

  1. Переключение значений ‘secure’ в опции cookie в обоих index.js и auth.js

  2. Используется пакет ‘express-samesite-default’

Следует отметить, что функциональность работала полгода назад, возможно, были некоторые обновления зависимостей, поэтому он изменил cookie.

Ответ №1:

Вы могли бы использовать локальное хранилище.
Локальное хранилище сохраняется на клиентском устройстве и доступно с помощью localStorage.getItem('key') , и вы можете добавлять элементы с помощью localStorage.setItem('key', 'value') .

Комментарии:

1. думаю, это сработало бы. Но как сервер может определить, авторизован ли запрос