最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

req.session 使用 express

网站源码admin50浏览0评论

req.session 使用 express

req.session 使用 express

我有一个应用程序使用 cookie 和 node 和 express,我需要一些帮助来让它工作。我有登录功能,想将我的用户数据设置为 req.session.user,但是当我在另一个端点使用 req.session.user 时出现问题,它返回未定义但当控制台在同一端点记录 req.session.user 时它的工作。

所以我用邮递员登录并成功创建了一个cookie,但是当我尝试在浏览器中登录时,应用程序> cookies中没有任何变化。

想法是我想将我的用户信息和 jwt 令牌发送到登录(获取端点)并将数据存储到前端的 redux 状态,但我不想将用户登录数据保存在本地存储或会话存储中。我需要一个粗略的例子。

感谢所有帮助!提前致谢。

index.js :

const express = require('express'); 
const app = express(); 
const cors = require("cors");
const port = 5000;
const dbConnect = require("./db/dbConnect");
const path = require('path');
const bodyParser = require('body-parser')
const cookieParser = require('cookie-parser');
const session = require('express-session');
const MongoDBStore = require('connect-mongodb-session')(session);
const http = require('http');
const { Server } = require('socket.io');
const dotenv =  require("dotenv");

dotenv.config();


dbConnect();

app.set("trust proxy", 1);

const server = http.createServer(app);
const io = new Server(server, {
  cors: {
    origin: "http://localhost:3000",
    methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
  },
});

app.use(
  cors({
  origin: ["http://localhost:3000", "http://localhost:5000"], 
  methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
  credentials: true,
  optionsSuccessStatus : 200
}));

app.use(express.json());
app.use(bodyParser.json());
app.use('/images', express.static(path.join(__dirname, 'images')));
app.use(bodyParser.urlencoded({extended: true}));

const store = MongoDBStore({
  collection: 'users',
  uri: process.env.MONGO_URL,
  expires: 1000
})

app.use(cookieParser());

app.use(session({
  cookie:{
      secure: true,
      sameSite: "production" ? "none" : "lax",
      maxAge: 24 * 60 * 60 * 1000
         },
  key: "keyId",
  store: store,
  secret: 'subscribe',
  saveUninitialized: true,
  resave: false,
  }));


const authRoute = require("./routes/auth");
const userRoute = require("./routes/user");
const producttRoute = require("./routes/product");
const cartRoute = require("./routes/cart");
const orderRoute = require("./routes/order");
const stripeRoute = require("./routes/stripe");



app.use(authRoute);
app.use(userRoute);
app.use(producttRoute);
app.use(cartRoute);
app.use(orderRoute);
app.use(stripeRoute);

server.listen(process.env.PORT || port, () => {
  console.log(`Listening on port ${port}`);
}) 

授权:

const express = require("express");
const router = express.Router();
const User = require("../models/User");
const CryptoJs = require("crypto-js");
const jwt = require("jsonwebtoken");



const Register = async (req, res) => {
    const newUser = new User({
        username: req.body.username,
        email: req.body.email,
        password: CryptoJs.AES.encrypt(req.body.password, process.env.PASS_SEC).toString(),
    });

    try {
        const savedUser = await newUser.save();
        res.status(201).json(savedUser);
    } catch (err) {
        res.status(500).json(err);
    }
}


const Login = async (req, res) => {
    
    try {

        const user = await User.findOne({ username: req.body.username });

        !user && res.status(401).json("Wrong Credentials!");

        const hashedPassword = CryptoJs.AES.decrypt(user.password, process.env.PASS_SEC);

        const OriginalPassword = hashedPassword.toString(CryptoJs.enc.Utf8);
        
        OriginalPassword !== req.body.password && 
            res.status(401).json("Wrong Credentials!");

            const accessToken = jwt.sign({
                id: user._id, 
                isAdmin: user.isAdmin
            }, process.env.JWT_SEC, 
            { expiresIn: "3d"}
            );

            const { password, ...others } = user._doc; 

            // req.session.user = { ...others};

            const sessionUser = {
                id: user._id,
                email: user.email,
                username: user.username,
                admin: user.isAdmin,
                token: accessToken
            };

            req.session.user = sessionUser

           
      
            res.status(200).json({ ...others, accessToken });
           
    } catch(err) {
        res.status(500).json(err);
        console.log(err);
    }
}

const getUserInfo = (req, res) => {

    console.log(req.session)

}

router.post("/register", Register);
router.post("/login", Login);
router.get("/login", getUserInfo);

module.exports = router
回答如下:

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论