From 764d0405532ebe2646133b570c351f1963367d66 Mon Sep 17 00:00:00 2001 From: Mrugesh Mohapatra Date: Sun, 20 May 2018 00:50:55 +0530 Subject: [PATCH] fix(component-passport): Add falback redirects for external paths --- server/component-passport.js | 41 ++++++++++++++++++++++++++++++++++++ server/passport-providers.js | 3 ++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/server/component-passport.js b/server/component-passport.js index f08305a4f2a..53497c92da3 100644 --- a/server/component-passport.js +++ b/server/component-passport.js @@ -92,6 +92,47 @@ export default function setupPassport(app) { Object.keys(passportProviders).map(function(strategy) { var config = passportProviders[strategy]; config.session = config.session !== false; + + // https://stackoverflow.com/q/37430452 + let successRedirect = (req) => { + if (!!req && req.session && req.session.returnTo) { + var returnTo = req.session.returnTo; + delete req.session.returnTo; + return returnTo; + } + return config.successRedirect || ''; + }; + config.customCallback = !config.redirectWithToken + ? null + : function(req, res, next) { + var url = require('url'); + passport.authenticate( + strategy, + {session: false}, + function(err, user, info) { + if (err) { + return next(err); + } + + if (!user) { + return res.redirect(config.failureRedirect); + } + var redirect = url.parse(successRedirect(req), true); + + delete redirect.search; + + redirect.query = { + /* eslint-disable camelcase */ + access_token: info.accessToken.id, + /* eslint-enable camelcase */ + userId: user.id.toString() + }; + redirect = url.format(redirect); + return res.redirect(redirect); + } + )(req, res, next); + }; + configurator.configureProvider( strategy, { diff --git a/server/passport-providers.js b/server/passport-providers.js index 0f8a1ac505e..4d408ec5b76 100644 --- a/server/passport-providers.js +++ b/server/passport-providers.js @@ -1,5 +1,5 @@ const successRedirect = '/settings'; -const failureRedirect = '/signin'; +const failureRedirect = '/'; const linkSuccessRedirect = '/settings'; const linkFailureRedirect = '/settings'; @@ -176,6 +176,7 @@ export default { callbackURL: '/auth/auth0/callback', authPath: '/auth/auth0', callbackPath: '/auth/auth0/callback', + redirectWithToken: false, successRedirect: successRedirect, failureRedirect: failureRedirect, scope: ['openid email'],