数据"/>
Node js passport认证,登录后无法获取用户数据
我正在开发一个节点 js 反应网站并使用护照我想管理用户的登录和注册会话。我可以成功注册用户并在我的 MongoDB 数据库中查看他们的数据,我也可以成功登录。但是当我尝试使用 req.user 检索已登录用户的数据时,我做不到,它给了我“未定义”并且应用程序似乎没有会话的任何内存。这是我的节点 js 代码:
mongoose.connect("mongodb://localhost:27017/userDB", {
useNewUrlParser: true,
useUnifiedTopology: true
});
const user = new mongoose.Schema({
username: String,
password: String
});
const User = new mongoose.model("User", user);
//middleware
app.use(session({
secret: "secret",
resave: false,
saveUninitialized: true,
}));
app.use(express.urlencoded({
extended: false
}));
app.use(express.json());
app.use(cors({
origin: "http://localhost:3000",
credentials: true,
}));
app.use(cookieParser("secret"));
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser((user, cb) => {
console.log("serializing user");
cb(null, user.id);
});
passport.deserializeUser((id, cb) => {
User.findById(id).then((err, user) => {
if(err) throw err;
console.log("id: " + id);
console.log("userid: " + user);
const userInformation = {
username: user.email,
};
cb(err, user);
}).catch((err) => {console.error(err)});
});
passport.use(
new localStrategy(async (username, password, done) => {
try{
const user = await User.findOne({username: username});
if(!user) {
console.log("no user");
return done(null, false);
}
bcryptpare(password, user.password, (err, result) => {
if(err) throw err;
if(result === true) {
return done(null, user);
} else {
return done(null, false);
}
});
} catch(err){
console.log("err inside localStrategy: " + err);
throw err;
}
})
);
app.post("/login", (req, res, next) => {
console.log("inside login");
passport.authenticate("local", (err, user, info) => {
console.log("inside authenticate, user: " + user);
if(err) {
console.log("err: " + err);
throw err;
}
if(!user) {
console.log("No user");
res.status(400);
res.send("No user exists");
}
else {
console.log("inside else");
req.logIn(user, (err) => {
if(err) throw err;
res.status(200).json({message: "login successful"});
});
}
})(req, res, next);
});
app.get("/isLogin", function(req, res) {
console.log("in isLogin");
if(req.isAuthenticated()){
console.log("it is logged in");
res.status(200).json(req.user);
}
else {
console.log("it is not logged in");
res.status(200).json({message: "user not logged in"});
}
});
app.listen(4000, () => {console.log("server started on port 4000")});
登录部分有效,但 /isLogin 表示用户未登录,而且当我尝试获取 req.user 时,它返回“未定义”。对此有任何帮助将不胜感激。谢谢
回答如下:更多推荐
Node js passport认证,登录后无法获取用户数据
发布评论