【发布时间】: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。