node.js - 我在浏览器的存储选项卡中看到了 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')
});
解决方案
这是因为在您设置它之后,您不会立即获得来自客户端的 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" });
});
推荐阅读
- vue.js - Vue + Font Awesome SVG 有时会渲染两次图标并给出 JS 错误
- dictionary - 如何在freemarker中创建字符串的哈希到命名空间变量?
- android - 带有延迟xml的Android动画
- python - 如何在 VS Code 1.36.1 上安装 Python 扩展
- android - 类型不匹配:推断类型是 Any but List
? 预计 - html - 下方带有文本的 CSS 栏
- javascript - Django 频道使用 ws:// 但无法与 wss:// 握手
- php - 我应该如何让 Xdebug 只运行 CLI php 而不是 UI
- opencl - 定义 $OPEN_CL_LIB 时遇到问题。我怎样才能做到这一点?
- r - Google Colab 上 R-Keras 的工作流程