fix(User.confirm): Overwrite confirm w/ custom method

Reduce db calls, implement old logic
This commit is contained in:
Berkeley Martinez
2017-12-29 10:49:49 -08:00
committed by mrugesh mohapatra
parent 6042ce2a84
commit c5420229e4

View File

@ -248,96 +248,42 @@ module.exports = function(User) {
}); });
debug('setting up user hooks'); debug('setting up user hooks');
// overwrite lb confirm
User.beforeRemote('confirm', function(ctx, _, next) { User.confirm = function(uid, token, redirectTo) {
return this.findById(uid)
if (!ctx.req.query) { .then(user => {
return ctx.res.redirect('/'); if (!user) {
} throw wrapHandledError(
new Error(`User not found: ${uid}`),
const uid = ctx.req.query.uid;
const token = ctx.req.query.token;
const redirect = ctx.req.query.redirect;
return User.findById(uid, (err, user) => {
if (err || !user || !user.newEmail) {
ctx.req.flash('error', {
msg: dedent`Oops, something went wrong, please try again later`
});
const err = wrapHandledError(
new Error('Theme is not valid.'),
{ {
Type: 'info', // standard oops
message: err.message type: 'info',
redirectTo
} }
); );
return ctx.res.redirect('/');
} }
if (user.verificationToken !== token) {
if (!user.verificationToken && !user.emailVerified) { throw wrapHandledError(
ctx.req.flash('info', { new Error(`Invalid token: ${token}`),
msg: dedent`Looks like we have your email. But you haven't {
verified it yet, please sign in and request a fresh verification type: 'info',
link.` message: dedent`
}); Looks like you have clicked an invalid link.
return ctx.res.redirect(redirect); Please sign in and request a fresh one.
`,
redirectTo
}
);
} }
if (!user.verificationToken && user.emailVerified) {
ctx.req.flash('info', {
msg: dedent`Looks like you have already verified your email.
Please sign in to continue.`
});
return ctx.res.redirect(redirect);
}
if (user.verificationToken && user.verificationToken !== token) {
ctx.req.flash('info', {
msg: dedent`Looks like you have clicked an invalid link.
Please sign in and request a fresh one.`
});
return ctx.res.redirect(redirect);
}
return user.update$({ return user.update$({
email: user.newEmail, email: user.newEmail,
emailVerified: true,
emailVerifyTTL: null,
newEmail: null, newEmail: null,
emailVerifyTTL: null verificationToken: null
}) }).toPromise();
.do(() => { });
return next(); };
})
.toPromise();
});
});
User.afterRemote('confirm', function(ctx) {
if (!ctx.req.query) {
return ctx.res.redirect('/');
}
const redirect = ctx.req.query.redirect;
ctx.req.flash('success', {
msg: [
'Your email has been confirmed!'
]
});
return ctx.res.redirect(redirect);
});
User.beforeRemote('login', function(ctx, notUsed, next) {
const { body } = ctx.req;
if (body && typeof body.email === 'string') {
if (!isEmail(body.email)) {
return next(createEmailError());
}
body.email = body.email.toLowerCase();
}
return next();
});
User.afterRemote('login', function(ctx, accessToken, next) { User.afterRemote('login', function(ctx, accessToken, next) {
var res = ctx.res; var res = ctx.res;