req.user не определен после входа в систему с помощью google-passport-oauth
После успешного входа в систему с помощью учетной записи Google в запросе обратного вызова req.user
установлен на нужного пользователя и req.isAuthenticated()
правда. Большой!
Тем не менее, любой последующий запрос будет иметь req.user
как неопределено. Неважно что я делаю.
Проблема возникает как с passport-google-auth2, так и с passport-google-auth.
Вот так мой index.js
похоже:
app.set('views', './src/express/views');
app.set('view engine', 'jsx');
app.engine('jsx', expressReactViews.createEngine({ beautify: true }));
app.use(express.static('./dist'));
app.use(cookieParser());
app.use(bodyParser.json());
app.use( bodyParser.urlencoded({
extended: true
}));
app.use(session({
secret: 'keyboard cat',
proxy: true,
resave: true,
saveUninitialized: true,
cookie: { secure: true }
}));
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function(user, done) {
// user is passed here correctly
done(null, user.id);
});
passport.deserializeUser(function(userId, done) {
db.connect(function(error, connection) {
if(error) {
done(error);
}
else {
users.find(connection, userId, function (user) {
connection.close();
// user is populated here, don't worry :)
done(null, user);
});
}
});
});
passport.use(googleStrategy);
А это как googleStrategy
похоже:
module.exports = new GoogleStrategy(
{
clientID: '[FAKE]',
clientSecret: '[FAKE]',
callbackURL: 'http://localhost:3000/auth/google/callback'
},
function(accessToken, refreshToken, profile, done) {
db.connect((error, connection) => {
if(error) {
done(error);
}
else {
users.findOrCreateFromGoogleProfile(connection, profile, (error, user) => {
connection.close();
done(error, user);
});
}
});
}
);
Вот так мой auth
Маршрутизатор выглядит так:
router.route('/google/callback').get(passport.authenticate('google', {
failureRedirect: '/error'
}), function(req, res) {
// here everything works. req.user is correctly set and req.isAuthenticated() is true
res.redirect('/index');
});
router.route('/google').get(passport.authenticate('google', {
scope: ['https://www.googleapis.com/auth/userinfo.profile',
'https://www.googleapis.com/auth/userinfo.email']
}));
module.exports = router;
Я делаю что-то не так?
2 ответа
Я хотел бы прокомментировать, а не прямо ответить на этот вопрос.
Можете ли вы попробовать запустить это вместо?
router.route('/google/callback').get(passport.authenticate('google', {
failureRedirect: '/error'
}), function(req, res) {
// here everything works. req.user is correctly set and req.isAuthenticated() is true
req.session.save(function(err) {
res.redirect('/index');
});
});
Поскольку все работает до перенаправления, это может решить проблему.
Я предполагаю, что информация о пользователе не сохраняется в БД.
Если вы перейдете по следующей ссылке и удалите свое приложение / сайт из списка разрешенных подключенных приложений / сайтов, сможете ли вы снова войти в систему?