Cookies не сохраняются в браузере, даже когда сервер отправляет set-cookie с использованием VERCEL

#javascript #cookies #browser #fetch #vercel

#javascript #файлы cookie #браузер #принести #vercel

Вопрос:

У меня запущено два сервера VERCEL. Один для сервера, а второй для клиента.

На сервере запущен УЗЕЛ -> экспресс -> экспресс-сеансы.

Клиент работает под управлением Svelte с помощью fetch api.

Мой сервер правильно устанавливает файлы cookie и отправляет их, но мой браузер не сохраняет файлы cookie.

Мой vercel.json:

 {
  "src": "/api/login",
  "dest": "/api/index.js",
  "headers": {
    "Access-Control-Allow-Origin": "{mydomain}",
    "Access-Control-Allow-Methods": "GET,OPTIONS,PATCH,DELETE,POST,PUT",
    "Access-Control-Allow-Headers": "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version",
    "Access-Control-Allow-Credentials": "true"
  },
  "continue": true
},
 

Экспресс-приложение — это:

 app.set('trust proxy', 1);
app.use(cookieParser("secretcode"));
app.use(session({
    secret: "secretcode",
    resave: true,
    saveUninitialized: true,
    cookie: {
        maxAge: 60000 * 10,
        secure: true
    },
    store: new MongoStore({ mongooseConnection: mongoose.connection })
}))
app.use(passport.initialize());
app.use(passport.session());
 

Конечной точкой входа в систему является:

 const login = async (req, res, next) => {
  passport.authenticate("local", (err, user, info) => {
    if (err) throw err;
    if (!user) {
      res.status(200)
      res.send("No User Exists")
    } else {
      req.logIn(user, (err) => {
        if (err) throw err;
        res.status(200)
        req.session.user = user;
        res.send({
          "message": "Successfully logged in"
        });
      });
    }
  })(req, res, next)
}
 

Клиентский код:

 async function login() {
    await fetch("{mydomain}/api/login", {
      method: "post",
      credentials: 'include',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        username: username,
        password: password
      })
    })
  }
 

Что я пробовал:

  1. Изменение vercel.json Access-Control-Allow-Origin на *
  2. Добавление / удаление учетных данных: ‘включить’

ничего не работает.

Есть два запроса: введите описание изображения здесь

Это заголовки req и respons: введите описание изображения здесь

А это печенье: введите описание изображения здесь

Я запускаю все с https, я даже пробовал только http, но безуспешно. Также в insomnia это работает безупречно.

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

1. Привет @Lumca, ты когда-нибудь решал свою проблему? У меня тоже такая же проблема

2. Привет @MatthewFrancis, к сожалению, я этого не сделал.

3. Это очень странно, я думаю, проблема с самим Vercel, вы развернули свой sit в другом приложении, таком как Heroku?

4. @Matthew Francis нет, я этого не делал, я использую только Vercel.

5. Эй, вы решили эту проблему, я вроде как застрял в той же проблеме