req.isAuthenticated читает true до тех пор, пока res.redirect на мою домашнюю страницу - PullRequest
2 голосов
/ 09 апреля 2020

Я проверил аналогичную тему здесь , где ПРАКА 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/");
});
...