diff --git a/common/models/User-Identity.js b/common/models/User-Identity.js index eeaa59f6a6..c7447314a7 100644 --- a/common/models/User-Identity.js +++ b/common/models/User-Identity.js @@ -53,13 +53,30 @@ export default function(UserIdent) { const email = profile.emails[0].value; return User.findOne$({ where: { email } }) .flatMap(user => { + const createToken = observeQuery( + AccessToken, + 'create', + { + userId: user.id, + created: new Date(), + ttl: user.constructor.settings.ttl + } + ); if (!user) { - return User.create$({ email }); + return Observable.combineLatest( + User.create$({ email }), + createToken, + (user, token) => ({ user, token }) + ); } - return Observable.of(user); + return Observable.combineLatest( + Observable.of(user), + createToken, + (user, token) => ({ user, token }) + ); }) .subscribe( - ( user ) => cb(null, user, null, null), + ({ user, token }) => cb(null, user, null, token), cb ); diff --git a/server/component-passport.js b/server/component-passport.js index f3a0101f35..27dfc69617 100644 --- a/server/component-passport.js +++ b/server/component-passport.js @@ -119,31 +119,33 @@ export default function setupPassport(app) { passport.authenticate( strategy, { session: false }, - (err, user) => { + (err, user, userInfo) => { + if (err) { return next(err); } - if (!user) { + if (!user || !userInfo) { return res.redirect(config.failureRedirect); } let redirect = url.parse(successRedirect(req), true); delete redirect.search; - req.flash( - 'success', - 'Success! You have signed in to your account. Happy Coding!' - ); - - // redirect.query = { - // /* eslint-disable camelcase */ - // access_token: info.accessToken.id, - // /* eslint-enable camelcase */ - // userId: user.id.toString() - // }; - - user.loginByRequest(req, res); + const { accessToken } = userInfo; + if (accessToken && accessToken.id) { + req.flash( + 'success', + 'Success! You have signed in to your account. Happy Coding!' + ); + const cookieConfig = { + signed: !!req.signedCookies, + maxAge: accessToken.ttl + }; + res.cookie('access_token', accessToken.id, cookieConfig); + res.cookie('userId', accessToken.userId, cookieConfig); + req.login(user); + } redirect = url.format(redirect); return res.redirect(redirect);