Я использую модуль паспорта узла-google-oauth и пытаюсь перенаправить страницу назад к исходному пути после успешной проверки подлинности, используя подход, основанный на сеансе, предложенный в Custom returnUrl on Node.js Passport's Google strategy , Тем не менее, я обнаружил, что в моем обратном вызове информация о перенаправлении, хранящаяся в сеансе, всегда была уничтожена, поэтому я был вынужден перенаправить на значение по умолчанию ('/' в этом случае).как перенаправить на исходную страницу после успешной проверки подлинности с помощью паспорта-google-oauth
Вот вывод журнала из моего фрагмента кода. Кажется, что когда он находится в обратном вызове, возврат был уничтожен. Это дизайн паспорта-google-oauth? Если да, то как можно перенаправить обратно на исходную страницу после успешной проверки подлинности?
// выход из
Storing url: /newroom
in /auth/google, returnTo = /newroom
in /auth/google/callback, returnTo = undefined
Storing url: /newroom
in /auth/google, returnTo = /newroom
in /auth/google/callback, returnTo = undefined
// фрагмент кода
var express = require('express'),
[sic]
passport = require('passport'),
GoogleStrategy = require('passport-google-oauth').OAuth2Strategy,
cookieParser = require('cookie-parser'),
expressSession = require('express-session'),
bodyParser = require('body-parser');
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
passport.use(new GoogleStrategy({
clientID: GOOGLE_CLIENT_ID,
clientSecret: GOOGLE_CLIENT_SECRET,
callbackURL: 'http://' + MY_HOST + '/auth/google/callback',
},
function(accessToken, refreshToken, profile, done) {
process.nextTick(function() {
console.log('Profile:' + profile);
return done(null, profile);
});
}
));
var auth = function(req, res, next){
if (!req.session.user) {
console.log('Storing url: ' + req.url);
req.session.returnTo = req.url;
res.redirect('/auth/google');
} else if (!userIsValid(req.session.user)) {
// handle invalid user
} else {
next();
}
};
app.get('/auth/google', function(req, res, next) {
console.log("in /auth/google, returnTo = " + req.session.returnTo);
passport.authenticate('google',
{
scope: ['https://www.googleapis.com/auth/userinfo.profile',
'https://www.googleapis.com/auth/userinfo.email']
}
)(req, res, next)
}
);
app.get('/auth/google/callback', function(req, res, next) {
console.log("in /auth/google/callback, returnTo = " + req.session.returnTo);
passport.authenticate('google', function(err, user, info) {
console.log("in /auth/google/callback callback");
if (err || !user) {
res.redirect('/auth/google');
} else {
var returnTo = req.session.returnTo ? req.session.returnTo : '/';
delete req.session.returnTo;
console.log('Redirecting to: ' + returnTo);
req.session.user = user;
res.redirect(returnTo);
}
})(req, res, next);
});