fix(User): Move login logic into user model

This commit is contained in:
Berkeley Martinez
2017-12-29 11:28:42 -08:00
committed by mrugesh mohapatra
parent c5420229e4
commit 296387d67e
2 changed files with 24 additions and 78 deletions

View File

@ -19,7 +19,7 @@ import {
getPort getPort
} from '../../server/utils/url-utils.js'; } from '../../server/utils/url-utils.js';
const debug = debugFactory('fcc:user:remote'); const debug = debugFactory('fcc:models:user');
const BROWNIEPOINTS_TIMEOUT = [1, 'hour']; const BROWNIEPOINTS_TIMEOUT = [1, 'hour'];
const createEmailError = redirectTo => wrapHandledError( const createEmailError = redirectTo => wrapHandledError(
@ -285,49 +285,30 @@ module.exports = function(User) {
}); });
}; };
User.afterRemote('login', function(ctx, accessToken, next) { User.prototype.loginByRequest = function login(req, res) {
var res = ctx.res; const createToken = this.createAccessToken$()
var req = ctx.req; .do(accessToken => {
// var args = ctx.args; const config = {
signed: !!req.signedCookies,
var config = { maxAge: accessToken.ttl
signed: !!req.signedCookies, };
maxAge: accessToken.ttl if (accessToken && accessToken.id) {
}; res.cookie('access_token', accessToken.id, config);
res.cookie('userId', accessToken.userId, config);
if (accessToken && accessToken.id) {
debug('setting cookies');
res.cookie('access_token', accessToken.id, config);
res.cookie('userId', accessToken.userId, config);
}
return req.logIn({ id: accessToken.userId.toString() }, function(err) {
if (err) { return next(err); }
debug('user logged in');
if (req.session && req.session.returnTo) {
var redirectTo = req.session.returnTo;
if (redirectTo === '/map-aside') {
redirectTo = '/map';
} }
return res.redirect(redirectTo); });
} const updateUser = this.update$({
emailVerified: true,
req.flash('success', { msg: 'Success! You are now logged in.' }); emailAuthLinkTTL: null,
return res.redirect('/'); emailVerifyTTL: null
}); });
}); return Observable.combineLatest(
createToken,
User.afterRemoteError('login', function(ctx) { updateUser,
var res = ctx.res; req.logIn(this),
var req = ctx.req; (accessToken) => accessToken,
);
req.flash('errors', { };
msg: 'Invalid username or password.'
});
return res.redirect('/email-signin');
});
User.afterRemote('logout', function(ctx, result, next) { User.afterRemote('logout', function(ctx, result, next) {
var res = ctx.res; var res = ctx.res;

View File

@ -157,42 +157,7 @@ module.exports = function enableAuthentication(app) {
}) })
// at this point token has been validated and destroyed // at this point token has been validated and destroyed
// update user and log them in // update user and log them in
.map(user => { .map(user => user.loginByRequest(req, res))
const emailVerified = true;
const emailAuthLinkTTL = null;
const emailVerifyTTL = null;
const updateUser = user.update$({
emailVerified,
emailAuthLinkTTL,
emailVerifyTTL
})
.do((user) => {
// update$ does not update in place
// update user instance to reflect db
user.emailVerified = emailVerified;
user.emailAuthLinkTTL = emailAuthLinkTTL;
user.emailVerifyTTL = emailVerifyTTL;
});
const createToken = user.createAccessToken$()
.do(accessToken => {
const config = {
signed: !!req.signedCookies,
maxAge: accessToken.ttl
};
if (accessToken && accessToken.id) {
res.cookie('access_token', accessToken.id, config);
res.cookie('userId', accessToken.userId, config);
}
});
return Observable.combineLatest(
updateUser,
createToken,
req.logIn(user),
);
})
.do(() => { .do(() => {
let redirectTo = '/'; let redirectTo = '/';