#node.js #express #passport.js
#node.js #экспресс #passport.js
Вопрос:
Я пытаюсь передать запрос и разрешение на обратный вызов, чтобы проверить ip пользователя, используя подсказку для предотвращения множественного учета, любая помощь была бы очень признательна. (запрос.ClientIP возвращает ip пользователя)
users.js фрагмент файла:
router.get('/google', passport.authenticate('google', {
scope: ['profile', 'email']
}));
router.get('/google/callback', (req, res) => {
passport.authenticate('google', {
failureRedirect: '/users/register'
}), (req, res) => {
res.redirect('/dashboard');
};
});
passport.js фрагмент файла:
passport.use(new GoogleStrategy({
clientID: keys.googleClientId,
clientSecret: keys.googleClientSecret,
callbackURL: '/users/google/callback',
proxy: true
}, (accessToken, refreshToken, profile, done) => {
console.log(accessToken, profile);
// const image = profile.photos[0].value;
const email = profile.emails[0].value;
var google = {
googleID: profile.id,
firstName: profile.name.givenName,
lastName: profile.name.familyName,
image: profile.photos[0].value
}
console.log(google);
User.findOne({
email: email
}).then(user => {
if (user) {
user.google = google
user.save().then(() => {
done(null, user);
});
} else {
console.log('no user');
new User({
email: email,
username: `${google.firstName} ${google.lastName}`,
google: google
}).save().then(user => {
done(null, user);
});
};
});
}));
Редактировать: я хочу получить доступ к запросу и разрешениям в passport.js файл. В остальном все работает
Если вам нужна дополнительная информация, я предоставлю ее, спасибо.
Ответ №1:
Проблема в router.get(‘/google’… Вы должны отправить что-то обратно клиенту.
router.get('/google', function(req,res){
passport.authenticate('google', {
scope: ['profile', 'email']
});
res.send('something');
});
router.get('/google/callback', (req, res) => {
passport.authenticate('google', {
failureRedirect: '/users/register'
}), (req, res) => {
res.redirect('/dashboard');//as these you send something
};
});
Комментарии:
1. Извините, я не был конкретен, я хотел получить доступ к запросу и разрешениям в passport.js файл. В остальном все работает так, как должно
Ответ №2:
Вы можете передать объект запроса в свой обратный вызов verify с помощью passReqToCallback
опции. Обратный вызов verify будет иметь объект request в качестве первого аргумента, а остальные будут выполняться в обычном режиме. Вот так
passport.use(new GoogleStrategy({
// ...
passReqToCallback: true
}, (req, accessToken, refreshToken, profile, done) => {
// access to req
})
Также не забудьте исправить '/google/callback'
настройку маршрута. Отсутствует по крайней мере одна завершающая скобка. И у вас нет функции, возвращаемой при authenticate()
фактическом вызове (она должна иметь форму authenticate()()
в анонимной функции).