fix: making login flow async again for cookies
This commit is contained in:
@ -53,13 +53,30 @@ export default function(UserIdent) {
|
|||||||
const email = profile.emails[0].value;
|
const email = profile.emails[0].value;
|
||||||
return User.findOne$({ where: { email } })
|
return User.findOne$({ where: { email } })
|
||||||
.flatMap(user => {
|
.flatMap(user => {
|
||||||
|
const createToken = observeQuery(
|
||||||
|
AccessToken,
|
||||||
|
'create',
|
||||||
|
{
|
||||||
|
userId: user.id,
|
||||||
|
created: new Date(),
|
||||||
|
ttl: user.constructor.settings.ttl
|
||||||
|
}
|
||||||
|
);
|
||||||
if (!user) {
|
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(
|
.subscribe(
|
||||||
( user ) => cb(null, user, null, null),
|
({ user, token }) => cb(null, user, null, token),
|
||||||
cb
|
cb
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -119,31 +119,33 @@ export default function setupPassport(app) {
|
|||||||
passport.authenticate(
|
passport.authenticate(
|
||||||
strategy,
|
strategy,
|
||||||
{ session: false },
|
{ session: false },
|
||||||
(err, user) => {
|
(err, user, userInfo) => {
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!user) {
|
if (!user || !userInfo) {
|
||||||
return res.redirect(config.failureRedirect);
|
return res.redirect(config.failureRedirect);
|
||||||
}
|
}
|
||||||
let redirect = url.parse(successRedirect(req), true);
|
let redirect = url.parse(successRedirect(req), true);
|
||||||
|
|
||||||
delete redirect.search;
|
delete redirect.search;
|
||||||
|
|
||||||
req.flash(
|
const { accessToken } = userInfo;
|
||||||
'success',
|
if (accessToken && accessToken.id) {
|
||||||
'Success! You have signed in to your account. Happy Coding!'
|
req.flash(
|
||||||
);
|
'success',
|
||||||
|
'Success! You have signed in to your account. Happy Coding!'
|
||||||
// redirect.query = {
|
);
|
||||||
// /* eslint-disable camelcase */
|
const cookieConfig = {
|
||||||
// access_token: info.accessToken.id,
|
signed: !!req.signedCookies,
|
||||||
// /* eslint-enable camelcase */
|
maxAge: accessToken.ttl
|
||||||
// userId: user.id.toString()
|
};
|
||||||
// };
|
res.cookie('access_token', accessToken.id, cookieConfig);
|
||||||
|
res.cookie('userId', accessToken.userId, cookieConfig);
|
||||||
user.loginByRequest(req, res);
|
req.login(user);
|
||||||
|
}
|
||||||
|
|
||||||
redirect = url.format(redirect);
|
redirect = url.format(redirect);
|
||||||
return res.redirect(redirect);
|
return res.redirect(redirect);
|
||||||
|
Reference in New Issue
Block a user