I am using Passport-Google-OAuth2.0 and Express-session to authenticate. Use connect-redis
to store session,
// app.ts
const RedisStore = connectRedis(session)
export const app = express()
app.set('trust proxy', 1)
export const cookieOptions = {
maxAge: +COOKIE_MAX_AGE,
httpOnly: true,
secure: isProduction,
signed: true,
}
app.use(
session({
store: new RedisStore({ client: redis }),
secret: env.SESSION_SECRET,
resave: false,
saveUninitialized: true,
cookie: env.cookieOptions,
})
)
app.use(passport.initialize())
app.use(passport.session())
Log in works, but it cannot log out. This is my attempt:
// Works
router.get('/auth/google', passport.authenticate('google', { scope: ['profile'] }))
// Works
router.get(
'/auth/google/callback',
passport.authenticate('google', { failureRedirect: '/signin' }),
async function (_req, res, _next) {
res.redirect('/')
}
)
// Not working
router.get('/auth/signout', function (req, res) {
req.session.destroy(function (err) {
if (err) console.log(` >> sess.des:`, err)
req.logout()
res.clearCookie('connect.sid')
// res.clearCookie('connect.sid', cookieOptions) // This throws 500 error
res.redirect('/outed')
})
})
When I go to http://localhost:8000/auth/signout
, it redirects to /outed
. I expected it to revoke my authentication state and have to login again.
So, I go to http://localhost:8000/auth/google
to log in again, but it keeps redirecting me back to authenticated successful route /
.
How do I log out properly with Passport and Redis session?
connect-redis: https://github.com/tj/connect-redis
express-session: https://github.com/expressjs/session
passport-google-oauth2: https://github.com/jaredhanson/passport-google-oauth2