【问题标题】:I see cookies in storage tab in my browser. But when I console log them I always see undefined我在浏览器的存储选项卡中看到了 cookie。但是当我控制台记录它们时,我总是看到未定义
【发布时间】:2021-03-03 09:54:39
【问题描述】:

我只看到 cookie 存储选项卡,但无法通过我的代码访问它们 当我控制台记录此令牌和 ID 时,它会导致“未定义”,但在我的浏览器存储中显示 cookie

const cookieParser = require('cookie-parser')
const express = require('express');

const app = express()
app.use(cookieParser())
   
app.get('/', async (req, res) => {
    function getLinkedinId(req) {
      return new Promise((resolve, reject) => {
          const url = 'https://api.linkedin.com/v2/me';
          const headers = {
              'Authorization': 'Bearer ' + req.cookies.token,
              'cache-control': 'no-cache',
              'X-Restli-Protocol-Version': '2.0.0' 
          };
          request.get({url: url, headers: headers}, (err, response, body) => {
              if(err){
                  reject(err);
              }
              resolve(JSON.parse(body).id);
          })
      })
    }
    const id = await getLinkedinId(req);
    res.cookie('id', id)
    console.log(`id: ${req.cookies.id}`)
    res.redirect('http://localhost:8080/about')
});

【问题讨论】:

  • 你说的是console.log(id: ${req.cookies.id})?不应该是res 而不是req 吗?错字?
  • 没有读取cookie解析器的文档

标签: node.js reactjs api vue.js web-development-server


【解决方案1】:

这是因为在您设置 cookie 后,您不会立即收到来自客户端的 cookie。这个概念是您在响应上设置一个 cookie,当客户端发送另一个请求时,它会将 cookie 附加到该响应上。

在您的情况下,cookie 将在后续请求中可用,想象一下这种情况:有人登录,响应将附加一个 cookie,并且在随后调用私有页面时,cookie 会被评估:

app.post("/login", (req, res) => {
  res
    .writeHead(200, {
      "Set-Cookie": "token=encryptedstring; HttpOnly",
      "Access-Control-Allow-Credentials": "true"
    })
    .send();
});

app.get("/private", (req, res) => {
  if (!req.cookies.token) return res.status(401).send();
  res.status(200).json({ secret: "Welcome to the private page" });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    相关资源
    最近更新 更多