Паспорт JS Google oauth2.0 войти / зарегистрироваться - PullRequest
1 голос
/ 21 июня 2020

Я пытался заставить google oauth login system работать на нескольких портах и ​​обнаружил проблемы с сохранением данных (от внутреннего интерфейса к интерфейсу) при перенаправлении (большинство руководств делают это на том же порту, что меня запутало). Я понимаю, как получить данные из бэкэнда на внешнем интерфейсе (через ax ios), но я confused how to send data from backend to frontend, поэтому я нашел этот учебник похожим на то, что я ищу. (Я попытался адаптировать это для использования google oauth вместо twitter)

Однако в этом руководстве во время перенаправления Google я получаю сообщение об ошибке:

Ошибка: не удалось сериализовать пользователя в сеанс

При поиске в Google большинство говорит, что это связано с функциями serializeUser и deserializeUser (которые у меня есть). Так что я очень застрял и надеюсь найти исправление.

Вот мой код:

passport.serializeUser((user, done) => {
  done(null, user.id);
});

// deserialize the cookieUserId to user in the database
passport.deserializeUser((id, done) => {
  User.findById(id)
    .then(user => {
      done(null, user);
    })
    .catch(e => {
      done(new Error("Failed to deserialize an user"));
    });
});

passport.use(
  new GoogleStrategy(
    {
      clientID: keys.googleClientID,
      clientSecret: keys.googleSecret,
      callbackURL: "http://localhost:5000/auth/google/redirect"
    },
    (token, tokenSecret, profile, done) => {
      // find current user in UserModel
      console.log(profile);
      const currentUser = User.findOne({
        googleId: profile.id
      });

      // create new user if the database doesn't have this user
      if (!currentUser) {
        const newUser = new User({
          name: profile.displayName,
          screenName: profile.displayName,
          googleId: profile.id,
          profileImageUrl: ""
        })

        newUser.save()
          .catch((err) => console.log(err));

        if (newUser) {
          done(null, newUser);
        }
      } else {
        done(null, currentUser);
      }
    }
  )
);

Спасибо, что прочитали это и помогли !!

...