fix: making login flow async again for cookies

This commit is contained in:
Mrugesh Mohapatra
2018-05-22 00:37:01 +05:30
parent 3f83cf59d5
commit e740f44bdd
2 changed files with 37 additions and 18 deletions

View File

@ -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
);

View File

@ -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);