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
回答如下:
更多推荐
req.session 使用 express
发布评论