fix(auth): Set domain cookies, and chain user

This commit is contained in:
Mrugesh Mohapatra
2018-05-22 18:10:00 +05:30
parent 8535669ea4
commit 90876ce02a
2 changed files with 29 additions and 12 deletions

View File

@ -53,6 +53,24 @@ 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 => {
return user ?
Observable.of(user) :
User.create$({ email }).toPromise();
})
.flatMap(user => {
if (!user) {
throw wrapHandledError(
new Error('could not find or create an user'),
{
message: dedent`
Oops... something is not right. We could not find create
an user with that email.
`,
type: 'info',
redirectTo: '/'
}
);
}
const createToken = observeQuery( const createToken = observeQuery(
AccessToken, AccessToken,
'create', 'create',
@ -62,17 +80,16 @@ export default function(UserIdent) {
ttl: user.constructor.settings.ttl ttl: user.constructor.settings.ttl
} }
); );
if (!user) { const updateUser = user.update$({
return Observable.combineLatest( emailVerified: true,
User.create$({ email }), emailAuthLinkTTL: null,
createToken, emailVerifyTTL: null
(user, token) => ({ user, token }) });
);
}
return Observable.combineLatest( return Observable.combineLatest(
Observable.of(user), Observable.of(user),
createToken, createToken,
(user, token) => ({ user, token }) updateUser,
(user, token) => ({user, token})
); );
}) })
.subscribe( .subscribe(
@ -90,10 +107,9 @@ export default function(UserIdent) {
{ {
message: dedent` message: dedent`
New accounts can only be created using an email address. New accounts can only be created using an email address.
Please create an account below
`, `,
type: 'info', type: 'info',
redirectTo: '/signup' redirectTo: '/'
} }
); );
} }
@ -113,7 +129,7 @@ export default function(UserIdent) {
new Error('user identity is not associated with a user'), new Error('user identity is not associated with a user'),
{ {
type: 'info', type: 'info',
redirectTo: '/signup', redirectTo: '/',
message: dedent` message: dedent`
The user account associated with the ${provider} user ${username || 'Anon'} The user account associated with the ${provider} user ${username || 'Anon'}
no longer exists. no longer exists.

View File

@ -140,7 +140,8 @@ export default function setupPassport(app) {
); );
const cookieConfig = { const cookieConfig = {
signed: !!req.signedCookies, signed: !!req.signedCookies,
maxAge: accessToken.ttl maxAge: accessToken.ttl,
domain: process.env.COOKIE_DOMAIN || 'localhost'
}; };
res.cookie('access_token', accessToken.id, cookieConfig); res.cookie('access_token', accessToken.id, cookieConfig);
res.cookie('userId', accessToken.userId, cookieConfig); res.cookie('userId', accessToken.userId, cookieConfig);