passport-local-mon goose и Google Auth, как обращаться с множественными сериализаторами с помощью Passport. js? - PullRequest
0 голосов
/ 03 мая 2020

как обрабатывать стратегию провайдера и локальную стратегию с паспортом. js с использованием passport-local-mon goose?

Здесь я определяю свои стратегии и де / сериализаторы

// For my Local strategy 
passport.serializeUser(Admin.serializeUser());
passport.deserializeUser(Admin.deserializeUser());

// For my Google strategy 
passport.serializeUser((user, done) => {
  done(null, user.id); //user.id is the id from Mongo
});

passport.deserializeUser((id, done) => {
  User.findById(id).then(user => {
    done(null, user);
  });
});

passport.use('google',
new GoogleStrategy(
{
  clientID: keys.googleClientID,
  clientSecret: keys.googleClientSecret,
  callbackURL: "/auth/google/callback",
  proxy: true
},
async (accessToken, refreshToken, profile, done) => {
  const existingUser = await User.findOne({ googleId: profile.id });

  if (existingUser) { 
    done(null, existingUser);
  } else {
    const user = await new User({ googleId: profile.id, token: accessToken, name:profile.displayName }).save();
    done(null, user);
    }
  }
 )
);

passport.use('local', new LocalStrategy(Admin.authenticate()));

Как вы видите, у меня есть 2 де / сериализатора, и это проблема, и она не работает, но если я беру только одну Сериализатор и один десериализатор для каждой работающей стратегии, поэтому вопрос заключается в том, как обрабатывать локальную стратегию и стратегию Google с помощью Passport. Js и node.js

Это то, что я пытаюсь сделать

passport.serializeUser(function(user, done) {
  if(// This is Local Strategy){

    User.serializeUser();
}
else{

    done(null, user);
}
});

passport.deserializeUser(function(user,id, done) {
    if(// This is Local Strategy){

        User.serializeUser();
}
    else{

       User.findById(id).then(user => {
           done(null, user);
        });
    }
});

ОБНОВЛЕНИЕ: Я нашел пост паспорт. js несколько методов де / сериализации с дополнительной информацией о нескольких де / сериализаторах, и я попробовал это:

passport.serializeUser((user, done) => {
    done(null, user.id); //user.id is the id from Mongo
});

passport.deserializeUser((id, done) => {
    User.findById(id)
        .then(user => {done(null, user)
         // .catch((err) => done('pass'));
        });
});

passport.deserializeUser((obj, done) => {
    Admin.deserializeUser();
});

Но подвох блок, упомянутый в этом посте, не работает для меня

...