как обрабатывать стратегию провайдера и локальную стратегию с паспортом. 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();
});
Но подвох блок, упомянутый в этом посте, не работает для меня