【问题标题】:Why the my NodeJS application can't read cookies via "req.cookies"? and it shows it as a null?我尝试了通过互联网找到的所有内容,但我无法为“req.cookies”结果解析“[Object: null prototype] {}”
【发布时间】:2022-06-11 03:44:17
【问题描述】:

我的应用程序将 refreshToken 分配给响应对象,如下所示:

newRefreshToken, { httpOnly: true, secure: true, sameSite: 'None', maxAge: 24 * 60 * 60 * 1000 });

当我检查 Postman 时,我会看到分配的 JWT 令牌,如下所示:

jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InFAcS5jb20iLCJpYXQiOjE2NTQ4MDMxMzIsImV4cCI6MTY2MjU3OTEzMn0.ustL6WVKWog53jAe8IFlaLw9g4BL7F1LJg5qc94F4TI; Path=/; Secure; HttpOnly; Expires=Fri, 10 Jun 2022 19:32:11 GMT;

但是当我尝试使用 req.cookies 读取 cookie 时,我在打印出 req 对象后得到了这个结果:

  cookies: [Object: null prototype] {},
  signedCookies: [Object: null prototype] {},

这是我的server.js 文件内容:

require('dotenv').config();
const express = require('express');
const app = express();
var passport = require('passport');
const path = require('path');
const cors = require('cors');
const corsOptions = require('./config/corsOptions');
const { logger } = require('./middleware/logEvents');
const errorHandler = require('./middleware/errorHandler');
const verifyJWT = require('./middleware/verifyJWT');
const cookieParser = require('cookie-parser');
const credentials = require('./middleware/credentials');
const mongoose = require('mongoose');
const connectDB = require('./config/dbConn');
const PORT = process.env.PORT || 3000;

// initializing passport
app.use(passport.initialize());

// Connect to MongoDB
connectDB();

// custom middleware logger
app.use(logger);

// Handle options credentials check - before CORS!
// and fetch cookies credentials requirement
app.use(credentials);

// Cross Origin Resource Sharing
app.use(cors(corsOptions));

// built-in middleware to handle urlencoded form data
app.use(express.urlencoded({ extended: false }));

// built-in middleware for json 
app.use(express.json());

//middleware for cookies
app.use(cookieParser());

//serve static files
app.use('/', express.static(path.join(__dirname, '/public')));

// routes
app.use('/', require('./routes/root'));
app.use('/register', require('./routes/register'));
app.use('/auth', require('./routes/auth'));
app.use('/refresh', require('./routes/refresh'));
app.use('/logout', require('./routes/logout'));

app.use(verifyJWT);
app.use('/employees', require('./routes/api/employees'));
app.use('/users', require('./routes/api/users'));

app.all('*', (req, res) => {
    res.status(404);
    if (req.accepts('html')) {
        res.sendFile(path.join(__dirname, 'views', '404.html'));
    } else if (req.accepts('json')) {
        res.json({ "error": "404 Not Found" });
    } else {
        res.type('txt').send("404 Not Found");
    }
});

app.use(errorHandler);

mongoose.connection.once('open', () => {
    console.log('Connected to MongoDB');
    app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
});

【问题讨论】:

  • 如果您不使用任何 cookie 解析器,请检查此npmjs.com/package/cookie-parser
  • @DhruvPal:我正在使用它。我在问题中添加了我的server.js 文件。也许我按错误的顺序使用它?
  • 所以如果我理解正确,您是在假设邮递员正在结束一些 cookie?你为什么不在这里粘贴邮递员卷曲?
  • @DhruvPal:在部分代码中,我确实像 res.cookie('jwt', newRefreshToken, { httpOnly: true, secure: true, sameSite: 'None', maxAge: 24 * 60 * 60 * 1000 }); 这样将 refreshToken 发送回用户,我可以在 Postman cookie 中自动看到它,但是当我尝试向获取的端点发送请求时这个 cookie 使用 req.cookies 似乎不起作用并且看不到 cookie。
  • @DhruvPal 我不知道如何粘贴 Postman curl。

标签: node.js cookies req


猜你喜欢
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-04
  • 2022-01-21
  • 2021-04-23
  • 2020-10-17
相关资源
最近更新 更多