update code

This commit is contained in:
Loay 2016-08-03 14:22:41 -04:00
parent 76a390d03e
commit 0f3522e28d
2 changed files with 43 additions and 14 deletions

View File

@ -560,19 +560,32 @@ module.exports = function(User) {
err.code = 'EMAIL_NOT_FOUND'; err.code = 'EMAIL_NOT_FOUND';
return cb(err); return cb(err);
} }
if (user && user.emailVerified) {
user.accessTokens.create({ ttl: ttl }, function(err, accessToken) {
if (err) {
return cb(err);
}
cb();
UserModel.emit('resetPasswordRequest', {
email: options.email,
user: user,
});
});
} else if (user && !user.emailVerified) {
// create a short lived access token for temp login to change password // create a short lived access token for temp login to change password
// TODO(ritch) - eventually this should only allow password change // TODO(ritch) - eventually this should only allow password change
user.accessTokens.create({ ttl: ttl }, function(err, accessToken) { user.accessTokens.create({ ttl: ttl }, function(err, accessToken) {
if (err) { if (err) {
return cb(err); return cb(err);
} }
cb(); cb();
UserModel.emit('resetPasswordRequest', { UserModel.emit('resetPasswordRequest', {
email: options.email, email: options.email,
accessToken: accessToken, accessToken: accessToken,
user: user, user: user,
});
}); });
}); }
}); });
return cb.promise; return cb.promise;

View File

@ -1685,7 +1685,8 @@ describe('User', function() {
describe('password reset without requiring email verification', function() { describe('password reset without requiring email verification', function() {
var email = 'foo1@bar.com'; var email = 'foo1@bar.com';
it('disallows temp accessToken creation if email verification is required and done', function(done) { it('disallows temp accessToken creation if email verification is required and done',
function(done) {
var calledBack = false; var calledBack = false;
User.resetPassword({ User.resetPassword({
@ -1697,15 +1698,30 @@ describe('User', function() {
User.once('resetPasswordRequest', function(info) { User.once('resetPasswordRequest', function(info) {
assert(info.email); assert(info.email);
assert(!info.accessToken); assert(!info.accessToken);
assert(!info.accessToken.id); assert(calledBack);
done();
});
});
it('creates accessToken if email has not been verified', function(done) {
var email = 'foo@bar.com';
var calledBack = false;
User.resetPassword({
email: 'foo@bar.com',
}, function() {
calledBack = true;
});
User.once('resetPasswordRequest', function(info) {
assert(info.email);
assert(info.accessToken);
assert(info.accessToken.id);
assert.equal(info.accessToken.ttl / 60, 15); assert.equal(info.accessToken.ttl / 60, 15);
assert(calledBack); assert(calledBack);
console.log(info);
info.accessToken.user(function(err, user) { info.accessToken.user(function(err, user) {
if (err) return done(err); if (err) return done(err);
assert.equal(user.email, email); assert.equal(user.email, email);
console.log(user.emailVerified);
done(); done();
}); });
}); });