javascript - 尽管有凭据 : "include",但未发送 Cookie

标签 javascript reactjs express cookies cross-domain

我在后端使用express,在前端使用react。我正在使用 cors 从 Passport.js GoogleOAuth 获取用户详细信息。我使用 Heroku 在两个不同的域中托管前端和后端。客户端中的请求如下所示:

fetchAuthUser = async () => {
    const metadata = {
      headers : {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
      },
      referrerPolicy: "strict-origin-when-cross-origin",
      body: null,
      method: "GET",
      mode: "cors",
      credentials: "include"
    }
    
    const response = await fetch(Env.backend_host +'/authenticate_google/api/current_user', metadata).catch((err) => {
        console.log(err)
    });

    console.log(response);

    if (response && response.data) {
      this.setState({user: eval(response.data)}, () => {this.loadPages()});
    }
  }

服务器当前的设置方式如下:

cookie是这样设置的,

router.use(
  cookieSession({
    maxAge: 30 * 24 * 60 * 60 * 1000, // sets cookie to expire in 30 days (converted to milliseconds)
    keys: ["trialkey"],
    sameSite: "lax",
  })
);

获取响应如下

router.get("/api/current_user", cors({ origin: "https://energycast-front.herokuapp.com", methods: ['GET','POST','OPTIONS'], credentials: true, preflightContinue: true}), (req, res) => {

    console.log("User:" +req.user)

    res.json(req.user);
 
  });

问题似乎与 cors 无关,但是在观察请求时,我发现没有发送 cookie。这很奇怪,因为我设置了凭据“include”。

注意,控制台正在将“用户”记录为在服务器本身上未定义。

任何帮助将不胜感激。

最佳答案

我已经弄清楚出了什么问题,问题出在 cookie session 中。当 cookie 设置为 sameSite = 'none' 时,网络工具将拾取它并返回必须将 secure 设置为 true 的错误。然而,在将 secure 设置为 true 后,网络调试工具恢复为说 Samesite 被设置为“Lax”并且无法发送 Cookie。

我因此切换到express-cookie包:

router.set('trust proxy', 1) // trust first proxy
router.use(
  session({
    secret: SECRET,
    resave: false,
    saveUninitialized: true,
    cookie: { 
      secure: true,
      sameSite: "none"
    }
  })
);

关于javascript - 尽管有凭据 : "include",但未发送 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68725629/

相关文章:

javascript - react 日期选择器 "Unable to preventDefault inside passive event listener invocation"

javascript - 如何在 Express 中向 req.url 添加查询字符串?

javascript - 如何将两条不同的路由映射到同一个路由器

javascript - 为什么重定向在 next.js 应用程序中不起作用?

javascript - 未捕获( promise 中)TypeError : _this3. setState 不是函数

javascript - 如何使用 onclick 函数调用 div 标签元素和另一个 div 标签元素

javascript - 设置溢出的div或iframe的初始Y值?

angularjs - Base 标签在 Angular HTML5 模式下破坏脚本链接

javascript - 处理 Jasmine 测试中的 javascript 错误

javascript - Rails3 link_to :with attribute?