我尝试将google oauth集成到我的节点应用程序中。相同的东西在本地服务器上运行时,heroku服务器上未设置cookie。
passport.js
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findById(id).then(user => {
done(null, user);
});
});
passport.use(
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) {
return done(null, existingUser);
}
const user = await new User({ googleId: profile.id }).save();
done(null, user);
}
)
);
RouteFile.js
在这里,我得到的req.user在oauth流之后与local和heroku相同。但是在heroku中,它没有设置cookie。
app.get(
'/auth/google/callback',
passport.authenticate('google'),
(req, res) => {
console.log(req.user);
res.redirect('/dashboard');
}
);
index.js
cookie设置。相同的东西在本地工作,但在heroku服务器上不工作
const app = express();
app.use(bodyParser.json());
app.use(
cookieSession({
//name: 'session',
maxAge: 30 * 24 * 60 * 60 * 1000,
keys: [keys.cookieKey],
//secure: true,
//httpOnly : false
})
);