【发布时间】:2020-10-20 18:46:31
【问题描述】:
我正在创建一个用于注册、登录的小型 MERN 应用,成功登录后,它会显示他们的个人资料。
1.我希望用户登录,如果登录成功,我会将 user._id 发送到 react 应用并将其重定向到 profile/user._id
2.在 ComponentDidMount 方法的配置文件页面上,我将使用它的 user._id 执行 get-request 以从我的服务器获取用户数据。
3.在这个get-request中,我想检查这个用户是否有一个活跃的会话,这样即使有人使用一个URL:profile/some_user_id,它也会总是检查一个活跃的会话。
我的问题是:
1.如果是,我是否需要明确地将 cookie 发送给客户端,那么如何或 express-session 将为我完成。
2.在解决1之后,当我执行/profile/id get-request 时,如何在会话中访问此保存的数据。
我的 app.js
require('./passport')(passport);
app.use(cookieParser());
//Express session
app.use(
session({
secret: 'secret',
resave: true,
saveUninitialized: false,
cookie: { maxAge: 60*60*1000 },
})
);
app.use(passport.initialize());
app.use(passport.session());
app.post('/login', (req, res, next) => {
passport.authenticate('local', (err, user, info) => {
if(err) {
res.status(203).send(err);
} else {
if(user) {
req.login(user, err => {
req.session.user = user;
console.log(req.session);
res.status(200).send(user._id);
})
} else {
res.status(202).send(info);
}
}
})(req, res, next);
});
app.get('/profile/:id', (req, res, next) => {
const id = req.params.id;
console.log(req.session);
res.send("session is running");
})
我的护照.js
passport.use(
new LocalStrategy({usernameField: 'email', passwordField: 'password'}, (email, password, done) => {
// Match User
User.findOne({email: email}, (err, user) => {
if(err) {
return done(err);
}
if(!user) {
return done(null, false, { msg: 'Input data incorrect!'})
}
// Match Password
bcrypt.compare(password, user.password, (err, isMatch) => {
if(err) throw error;
if(isMatch) {
return done(null, user);
} else {
return done(null, false, { msg: "Input data incorrect!"})
}
});
})
})
);
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findById(id, (err, user) => {
done(err, user);
});
});
console.log(req.session) 在“/login”发布请求中。
Session {
cookie: {
path: '/',
_expires: 2020-07-03T18:44:55.179Z,
originalMaxAge: 3600000,
httpOnly: true,
secure: false
},
passport: { user: '5ef7a8b55570c353bc1aef12' },
user: {
_id: 5ef7a8b55570c353bc1aef12,
email: 'mukeshgupta202000@gmail.com',
userName: 'asdd',
password: '$2b$10$wzF6uwxcFNHgi4NdNBL5A.wEAs4W14zQ8YpEboPJWttvRaIO6MXCq',
createdAt: 2020-06-27T20:14:45.303Z,
updatedAt: 2020-06-27T20:14:45.303Z,
__v: 0
}
}
console.log(req.session)
console.log(req.session.user) 在“/user/:id”getrequest 中。
Session {
cookie: {
path: '/',
_expires: 2020-07-03T18:44:57.514Z,
originalMaxAge: 3600000,
httpOnly: true,
secure: false
}
}
undefined
【问题讨论】:
标签: javascript node.js express session cookies