【问题标题】:req cookies undefined expressreq cookies undefined express
【发布时间】:2021-07-12 21:51:04
【问题描述】:

我不知道为什么 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)

我哪里做错了?提前非常感谢,非常感谢任何帮助。谢谢

【问题讨论】:

    标签: node.js express cookies jwt


    【解决方案1】:

    这是一个工作示例:

    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
    

    【讨论】:

      猜你喜欢
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      • 2017-07-22
      • 2020-07-11
      相关资源
      最近更新 更多