Я пытаюсь реализовать OAuth в приложении Express с использованием Passport. js и когда я пытаюсь войти в систему с моей учетной записью Google, и я нажимаю на функцию обратного вызова, я получаю ошибку illegal arguments: undefined, string at Strategy.module.exports [as _verify]
. Когда я удаляю аргумент req из списка параметров функции обратного вызова, профиль становится неопределенным, но когда у меня есть требование req и я записываю профиль в консоль, я получаю данные обратно, тогда возникает ошибка illegal arguments: undefined, string
. Я также гарантирую, что я передаю passReqToCallback:true
в моих настройках Google. Любая помощь будет оценена, я застрял на этом некоторое время сейчас.
passport.serializeUser((user, cb) => {
return cb(null, user);
});
passport.deserializeUser((user, cb) => {
return cb(null, user);
});
//googleOptions.js
{
clientID: process.env.googleClientID,
clientSecret: process.env.googleClientSecret,
callbackURL: 'http://localhost:5000/auth/google/callback',
passReqToCallback: true
}
//googleCallback function
async (req, accessToken, refreshToken, profile, done) => {
try {
// will log the profile so far as the parameter list is as is
// will return undefined if req is missing from the parameter list
console.log(profile);
const user = await User.findOne({ googleId: profile.id });
if (user) {
done(null, user);
return;
}
const salt = await bcrypt.genSalt(12);
const hashedPassword = await bcrypt.hash(profile.token, salt);
const newUser = new User({
email: profile.emails[0].value,
firstName: profile.name.displayName.split(' ')[0].join(''),
lastName: profile.name.familyName,
googleId: profile.id,
password: hashedPassword
});
const token = newUser.generateAuthToken();
req.token = token;
await newUser.save();
return done(null, newUser);
} catch (error) {
console.log(`Error Message: ${error}`);
throw new Error(`Error Message: ${error.message}`);
}
};