请求 cookies undefined express
req cookies undefined express
我不明白为什么 req cookie 在 expressJS 中总是未定义。这是我的代码:
const accessToken = jwt.sign({id:user._id}, process.env.JWT_TOKEN_SECRET)
console.log(accessToken)
res.cookie('authcookie',accessToken)
console.log(req.cookies.authcookie)
这里是 server.js 代码:
const express = require("express");
const app = express();
const morgan = require('morgan');
const bodyParser = require("body-parser");
const cors = require("cors");
const dotenv = require('dotenv');
const cookieParser = require('cookie-parser');
const path = require('path');
const userRoute = require('./routes/user')
dotenv.config()
const port = process.env.PORT || 5000
app.use(cors());
app.use(cookieParser())
app.use(morgan('dev'))
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended:false}))
app.use('/api', userRoute)
我哪里做错了?非常感谢,非常感谢任何帮助。谢谢
这是一个工作示例:
server.js
:
const express = require('express');
const app = express();
const morgan = require('morgan');
const bodyParser = require('body-parser');
const cors = require('cors');
const cookieParser = require('cookie-parser');
const jwt = require('jsonwebtoken');
process.env.JWT_TOKEN_SECRET = 'secret';
const port = process.env.PORT || 5000;
app.use(cors());
app.use(cookieParser());
app.use(morgan('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.get('/auth', (req, res) => {
const user = { _id: '123' };
const accessToken = jwt.sign({ id: user._id }, process.env.JWT_TOKEN_SECRET);
res.cookie('authcookie', accessToken);
res.sendStatus(200);
});
app.get('/api', (req, res) => {
console.log(req.cookies);
jwt.verify(req.cookies.authcookie, process.env.JWT_TOKEN_SECRET, (err, decoded) => {
if (err) {
console.log(err);
res.sendStatus(500);
return;
}
console.log('decoded jwt: ', decoded);
res.sendStatus(200);
});
});
app.listen(port, () => console.log(`HTTP server is listening on http://localhost:${port}`));
使用 http://localhost:5000/auth
URL 打开浏览器以获取 authcookie
cookie。然后访问http://localhost:5000/api
URL调用api.
控制台输出:
HTTP server is listening on http://localhost:5000
GET /aut 404 2.095 ms - 142
GET /auth 200 4.047 ms - 2
{
authcookie: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEyMyIsImlhdCI6MTYxODgxODMyM30.mwCmW2NKSE9Youppnq_SCft7snYSp1Ud7nTThi7Q6Os'
}
decoded jwt: { id: '123', iat: 1618818323 }
GET /api 200 3.856 ms - 2
我不明白为什么 req cookie 在 expressJS 中总是未定义。这是我的代码:
const accessToken = jwt.sign({id:user._id}, process.env.JWT_TOKEN_SECRET)
console.log(accessToken)
res.cookie('authcookie',accessToken)
console.log(req.cookies.authcookie)
这里是 server.js 代码:
const express = require("express");
const app = express();
const morgan = require('morgan');
const bodyParser = require("body-parser");
const cors = require("cors");
const dotenv = require('dotenv');
const cookieParser = require('cookie-parser');
const path = require('path');
const userRoute = require('./routes/user')
dotenv.config()
const port = process.env.PORT || 5000
app.use(cors());
app.use(cookieParser())
app.use(morgan('dev'))
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended:false}))
app.use('/api', userRoute)
我哪里做错了?非常感谢,非常感谢任何帮助。谢谢
这是一个工作示例:
server.js
:
const express = require('express');
const app = express();
const morgan = require('morgan');
const bodyParser = require('body-parser');
const cors = require('cors');
const cookieParser = require('cookie-parser');
const jwt = require('jsonwebtoken');
process.env.JWT_TOKEN_SECRET = 'secret';
const port = process.env.PORT || 5000;
app.use(cors());
app.use(cookieParser());
app.use(morgan('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.get('/auth', (req, res) => {
const user = { _id: '123' };
const accessToken = jwt.sign({ id: user._id }, process.env.JWT_TOKEN_SECRET);
res.cookie('authcookie', accessToken);
res.sendStatus(200);
});
app.get('/api', (req, res) => {
console.log(req.cookies);
jwt.verify(req.cookies.authcookie, process.env.JWT_TOKEN_SECRET, (err, decoded) => {
if (err) {
console.log(err);
res.sendStatus(500);
return;
}
console.log('decoded jwt: ', decoded);
res.sendStatus(200);
});
});
app.listen(port, () => console.log(`HTTP server is listening on http://localhost:${port}`));
使用 http://localhost:5000/auth
URL 打开浏览器以获取 authcookie
cookie。然后访问http://localhost:5000/api
URL调用api.
控制台输出:
HTTP server is listening on http://localhost:5000
GET /aut 404 2.095 ms - 142
GET /auth 200 4.047 ms - 2
{
authcookie: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEyMyIsImlhdCI6MTYxODgxODMyM30.mwCmW2NKSE9Youppnq_SCft7snYSp1Ud7nTThi7Q6Os'
}
decoded jwt: { id: '123', iat: 1618818323 }
GET /api 200 3.856 ms - 2