【问题标题】:Cookies and session nodejsCookies 和会话 nodejs
【发布时间】:2021-06-20 23:36:02
【问题描述】:

我使用 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 时,我看不到存储数据的会话。

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

【问题讨论】:

  • 您的 cookie 配置有 secure: true,这要求您的服务器是 https 而不是 http。
  • 这行不通。
  • 你能显示你向服务器发出请求的客户端代码吗?
  • 我用新的答案编写客户端代码

标签: node.js reactjs mongodb express session


【解决方案1】:

这是一个客户请求:

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);
    }
}

【讨论】:

  • axios.post(url, {email, password}, {withCredentials: true}).then(...........
【解决方案2】:

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

enter image description here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2023-03-19
    • 2012-07-07
    • 1970-01-01
    • 2012-09-27
    相关资源
    最近更新 更多