节点:Cookie 未在浏览器中使用此代码设置 res.cookie("singingGroupAVoted", true, {maxAge: 432000 * 1000, sameSite: "none", secure: true})

问题描述

我使用 node express 构建了一个 API,并将其部署在 Heroku 上。然后我用 reactJS 构建客户端并将其部署在 Netlify 上。我使用了 cors 包来避免 cors 错误。这是我的服务器文件(后端入口点)-

const express = require("express");
const app = express();
const requestIP = require("request-ip");
const requestCountry = require("request-country");
const mongoose = require("mongoose");
require("dotenv").config();
const bodyParser = require("body-parser");
const cors = require("cors");
const cookieParser = require("cookie-parser");

const singingGroupA = require("./routes/api/singing/groupA");
const singingGroupB = require("./routes/api/singing/groupB");
const mehandiGroupA = require("./routes/api/mehandi/groupA");
const mehandiGroupB = require("./routes/api/mehandi/groupB");
const post = require("./routes/api/post");
const contact = require("./routes/api/contact");

const PORT = process.env.PORT || 5000;
const DB_URL = `mongodb+srv://${process.env.DB_USER}:${process.env.DB_PASS}@bsp-competitions.n2yb5.mongodb.net/${process.env.DB_NAME}?retryWrites=true&w=majority`;

// connect database
mongoose
  .connect(DB_URL,{
    useNewUrlParser: true,useUnifiedTopology: true,useFindAndModify: false,})
  .then(() => {
    console.log("database connected");
  })
  .catch((err) => console.log(err));

var allowedDomains = [
  "http://localhost:3000","https://www.freedemy.in","https://freedemy.in","http://127.0.0.1:3000","https://dance-and-mehandi-bsp.herokuapp.com",];
app.use(
  cors({
    origin: function (origin,callback) {
      // bypass the requests with no origin (like curl requests,mobile apps,etc )
      if (!origin) return callback(null,true);

      if (allowedDomains.indexOf(origin) === -1) {
        var msg = `This site ${origin} does not have an access. Only specific domains are allowed to access it.`;
        return callback(new Error(msg),false);
      }
      return callback(null,true);
    },credentials: true,methods: ["GET","POST","PUT","OPTIONS"],})
);

app.use(bodyParser.urlencoded({ extended: false })); // parse application/x-www-form-urlencoded
app.use(bodyParser.json()); // parse application/json

app.use(cookieParser());

app.use(requestIP.mw());

app.use(
  requestCountry.middleware({
    attributeName: "requestCountryCode",// default is 'requestCountryCode'
    privateIpCountry: "IN",// Result for private network IPs
  })
);

// route middlewares
app.use("/api/post",post);
app.use("/api/contact",contact);
app.use("/api/singing/group-a",singingGroupA);
app.use("/api/singing/group-b",singingGroupB);
app.use("/api/mehandi/group-a",mehandiGroupA);
app.use("/api/mehandi/group-b",mehandiGroupB);

if (process.env.NODE_ENV == "production") {
  app.use(express.static("client/build"));

  const path = require("path");

  app.get("/*",(req,res) => {
    res.sendFile(path.join("/","app","client","build","index.html"));
  });
}

app.listen(PORT,() => {
  console.log("server is running on port : ",PORT);
});

一切正常,除了 COOKIES :(

这是响应头。可以看到没有问题

enter image description here

当我发送 post 请求时,浏览器应该保存一个 cookie,但它没有保存,我不知道为什么。 这就是我使用 cookie 发送响应的方式 -

res
      .status(200)
      .cookie("singingGroupAVoted",true,{
        maxAge: 432000 * 1000,sameSite: "none",secure: true,})
      .send({
        success: true,message: "Vote registered successfully",});

不知道浏览器没有保存 cookie。 我们将不胜感激任何类型的帮助

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)