Cookie 和会话 nodejs

时间:2021-06-15 14:19:18

标签: node.js reactjs mongodb express session

我使用 nodejs 创建了 Api 服务器,使用 reactjs 创建了客户端, 客户端跑在url:5000,客户端跑到url:3000,分别运行。 客户端向服务器端发送请求并返回给它。 我在服务器中创建了一个会话,当我使用登录功能连接时,我使用 jwt 返回一些令牌,并将令牌返回给客户端,但是客户端浏览器中的问题我没有 session.id

这是我的代码 appjs

const express = require('express');
const app = express();
const session = require('express-session');
const cors = require('cors');
const cookieParser = require('cookie-parser')
const resource = require('./resources/en-US');
const dotenv = require('dotenv');

dotenv.config();

var corsOptions = {
  origin: 'http://localhost:3000',
  credentials: true,
  optionsSuccessStatus: 200 // For legacy browser support
}

const authRouter = require('./routes/auth-router');
const adminRouter = require('./routes/admin-router');

app.use(cors(corsOptions));
app.use(express.json());
// app.use(cookieParser());

const http = require('http').createServer(app);

const mongoose = require('mongoose');
const MongoStore = require('connect-mongodb-session')(session);
const store = new MongoStore({
  uri : process.env.MONGODB_URL,
  collection:'session',
});

app.use(session({
  secret: process.env.SESSION_SECRET_KEY,
  resave: true,
  saveUninitialized: true,
  store: store,
  cookie: { secure: true,httpOnly:true }
}))

app.use('/api', authRouter);
app.use('/api', adminRouter);

mongoose
.connect(process.env.MONGODB_URL,{
  useNewUrlParser:true,
  useCreateIndex:true,
  useUnifiedTopology:true
})
  .then(() => console.log('connected'))
  .catch(err => console.log(err))

http.listen(process.env.PORT, () => {
  console.log(`listening on port ${process.env.PORT}`);
});

当我转到 Api 服务器中的其他路由并尝试打印 req.session 时,我没有看到我的会话与存储数据。

请问我需要帮助, 有什么问题?

2 个答案:

答案 0 :(得分:0)

这是一个客户端请求:

export const authenticationLogin = async (data) => {
    const {email , password} = data;
    console.log("log in controller")
    try{
        return new Promise( (resolve,reject) => {
            axios(
                {
                    url:"/login",
                    method : "POST",
                    data: {
                        email  : email,
                        password: password
                    },
                    withCredentials: true
                }
                ).then( async (data) => {
                    console.log("after responce feching")
                    axios.defaults.headers.common['x-auth-token'] = data.data.token;
                    console.log(data);
                    debugger;
                    resolve(data.data);
                }).catch(error => {
                    reject(error)
                })
        })
    }catch(error){
        console.error(error);
    }
}

答案 1 :(得分:0)

这不行 添加了带有响应头的新图像,我看到了 setCookies,但我在 cookie(应用程序选项卡)中看不到它

enter image description here

相关问题