首页 > 解决方案 > 我在浏览器的存储选项卡中看到了 cookie。但是当我控制台记录它们时,我总是看到未定义

问题描述

我只看到 cookie 存储选项卡,但无法通过我的代码访问它们 当我 console.log 这个令牌和 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')
});

标签: node.jsreactjsapivue.jsweb-development-server

解决方案


这是因为在您设置它之后,您不会立即获得来自客户端的 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" });
});


推荐阅读