Я проверил аналогичную тему здесь , где ПРАКА SH ТОМАС ВАРГИЗЕ довольно тщательно разбил процесс сессии, но, боюсь, я оказался в другой проблеме.
вплоть до последних шагов, пользователь виден в моих console.logs и когда он направляется на мой URL обратного вызова, req.isAuthenticated имеет значение true и req.user работает. На последнем шаге я переадресовываю на свою домашнюю страницу в реакции ...
app.get(
"/auth/google/login",
passport.authenticate("google", {
failureRedirect: "http://http://localhost:3000/old/all"
}),
(req, res) => {
console.log(`Authenticated: ${req.isAuthenticated()}`); //READS TRUE
console.log(`user: ${req.user}`); // USER SHOWS UP WITH ALL PARTS SHOWING
res.redirect("http://localhost:3000/");
}
);
При перенаправлении на дом (в приложении реагирования) мне отправляется запрос на выборку, проверяющий, является ли пользователь аутентифицированным на другом маршруте.
axios
.get("http://localhost:5000/getuser")
.then(res => {
setUser(res.data);
console.log(res.data);
})
.catch(err => {
console.log(err);
});
}, []);
через /getuser....
app.get("/getuser", (req, res) => {
console.log("user:", req.user); // READS UNDEFINED HERE
console.log("/getuser isAuthenticated:", req.isAuthenticated()); //READS AS FALSE HERE
if (req.isAuthenticated()) {
const user = req.user;
res.json({ user: user, isAuthenticated: true });
} else {
const user = false;
res.json({ user: false, isAuthenticated: false });
}
});
По какой-то причине я не смог определить, но req.user становится неопределенным, а isAuthenticated читает false. Моя база данных сохраняет пользователя и сеансы, и я не знаю, что оттуда происходит.
Единственный другой вывод, по которому я должен go - это pasport.deserializeUser, кажется, запускается дважды, но я ничего не вижу в коде это вызвало бы это.
const sessionStore = new MongoStore({
//url: process.env.MONGOAUTH,
url: "mongodb://localhost:27017/friftr",
ttl: 1 * 24 * 60 * 60, // = 1 days. Default
autoReconnect: true
}).on("error", function(err) {
if (err.errno === "EADDRINUSE") {
console.log("port busy 33");
console.log(err);
} else {
console.log(err);
}
});
// Express Session
const sessionMiddleware = session({
secret: process.env.SECRET2,
resave: true,
store: sessionStore,
saveUninitialized: true
});
app.use(sessionMiddleware); // 1
//passport middleware
app.use(passport.initialize()); //2
app.use(passport.session()); //3
//ONCE MONGOOSE IS SETUP WE CAN BEGIN SIGNING IN
userSchema.plugin(passportLocalMongoose); // MUST BE BEFORE const User
userSchema.plugin(findOrCreate);
const User = mongoose.model("User", userSchema); // MUST BE AFTER userSchema.plugins(passportLocalMongoose)
passport.use(User.createStrategy());
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findById(id, (err, user) => {
console.log(`user here:`, user);
done(err, user);
});
});
passport.use(
new GoogleStrategy(
{
clientID: process.env.CLIENT_ID,
clientSecret: process.env.CLIENT_SECRET,
callbackURL: "/auth/google/login"
},
(accessToken, refreshToken, profile, cb) => {
console.log(`first`, cb);
User.findOrCreate(
{
googleId: profile.id,
email: profile._json.email,
username: profile._json.email
},
(err, user) => cb(err, user)
);
}
)
);
app.get(
"/auth/google",
passport.authenticate("google", { scope: ["profile", "email"] })
);
app.get(
"/auth/google/login",
passport.authenticate("google", {
failureRedirect: "http://http://localhost:3000/old/all"
}),
(req, res) => {
console.log(`Authenticated: ${req.isAuthenticated()}`);
console.log(`user: ${req.user}`);
res.redirect("http://localhost:3000/");
}
);
app.get("/logout", function(req, res) {
req.logout();
res.redirect("http://localhost:3000/");
});