Merge pull request #394 from strongloop/feature/fix-issue-377
Report error for User.confirm()
This commit is contained in:
commit
d567c4d009
|
@ -358,18 +358,25 @@ User.confirm = function (uid, token, redirect, fn) {
|
||||||
if(err) {
|
if(err) {
|
||||||
fn(err);
|
fn(err);
|
||||||
} else {
|
} else {
|
||||||
if(user.verificationToken === token) {
|
if(user && user.verificationToken === token) {
|
||||||
user.verificationToken = undefined;
|
user.verificationToken = undefined;
|
||||||
user.emailVerified = true;
|
user.emailVerified = true;
|
||||||
user.save(function (err) {
|
user.save(function (err) {
|
||||||
if(err) {
|
if(err) {
|
||||||
fn(err)
|
fn(err);
|
||||||
} else {
|
} else {
|
||||||
fn();
|
fn();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
fn(new Error('invalid token'));
|
if (user) {
|
||||||
|
err = new Error('Invalid token: ' + token);
|
||||||
|
err.statusCode = 400;
|
||||||
|
} else {
|
||||||
|
err = new Error('User not found: ' + uid);
|
||||||
|
err.statusCode = 404;
|
||||||
|
}
|
||||||
|
fn(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -435,7 +435,7 @@ describe('User', function(){
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Verification', function(){
|
describe('Verification', function(){
|
||||||
|
|
||||||
describe('user.verify(options, fn)', function(){
|
describe('user.verify(options, fn)', function(){
|
||||||
it('Verify a user\'s email address', function(done) {
|
it('Verify a user\'s email address', function(done) {
|
||||||
User.afterRemote('create', function(ctx, user, next) {
|
User.afterRemote('create', function(ctx, user, next) {
|
||||||
|
@ -454,8 +454,6 @@ describe('User', function(){
|
||||||
assert(result.email);
|
assert(result.email);
|
||||||
assert(result.email.response);
|
assert(result.email.response);
|
||||||
assert(result.token);
|
assert(result.token);
|
||||||
|
|
||||||
|
|
||||||
assert(~result.email.response.toString('utf-8').indexOf('To: bar@bat.com'));
|
assert(~result.email.response.toString('utf-8').indexOf('To: bar@bat.com'));
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
@ -471,13 +469,15 @@ describe('User', function(){
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('User.confirm(options, fn)', function(){
|
describe('User.confirm(options, fn)', function () {
|
||||||
it('Confirm a user verification', function(done) {
|
var options;
|
||||||
User.afterRemote('create', function(ctx, user, next) {
|
|
||||||
|
function testConfirm(testFunc, done) {
|
||||||
|
User.afterRemote('create', function (ctx, user, next) {
|
||||||
assert(user, 'afterRemote should include result');
|
assert(user, 'afterRemote should include result');
|
||||||
|
|
||||||
var options = {
|
options = {
|
||||||
type: 'email',
|
type: 'email',
|
||||||
to: user.email,
|
to: user.email,
|
||||||
from: 'noreply@myapp.org',
|
from: 'noreply@myapp.org',
|
||||||
|
@ -485,29 +485,73 @@ describe('User', function(){
|
||||||
protocol: ctx.req.protocol,
|
protocol: ctx.req.protocol,
|
||||||
host: ctx.req.get('host')
|
host: ctx.req.get('host')
|
||||||
};
|
};
|
||||||
|
|
||||||
user.verify(options, function (err, result) {
|
user.verify(options, function (err, result) {
|
||||||
if(err) return done(err);
|
if (err) {
|
||||||
|
return done(err);
|
||||||
request(app)
|
}
|
||||||
.get('/users/confirm?uid=' + result.uid + '&token=' + encodeURIComponent(result.token) + '&redirect=' + encodeURIComponent(options.redirect))
|
testFunc(result, done);
|
||||||
.expect(302)
|
|
||||||
.expect('location', options.redirect)
|
|
||||||
.end(function(err, res){
|
|
||||||
if(err) return done(err);
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
request(app)
|
request(app)
|
||||||
.post('/users')
|
.post('/users')
|
||||||
.expect('Content-Type', /json/)
|
.expect('Content-Type', /json/)
|
||||||
.expect(302)
|
.expect(302)
|
||||||
.send({email: 'bar@bat.com', password: 'bar'})
|
.send({email: 'bar@bat.com', password: 'bar'})
|
||||||
.end(function(err, res){
|
.end(function (err, res) {
|
||||||
if(err) return done(err);
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
it('Confirm a user verification', function (done) {
|
||||||
|
testConfirm(function (result, done) {
|
||||||
|
request(app)
|
||||||
|
.get('/users/confirm?uid=' + (result.uid )
|
||||||
|
+ '&token=' + encodeURIComponent(result.token)
|
||||||
|
+ '&redirect=' + encodeURIComponent(options.redirect))
|
||||||
|
.expect(302)
|
||||||
|
.end(function (err, res) {
|
||||||
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
}, done);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Report error for invalid user id during verification', function (done) {
|
||||||
|
testConfirm(function (result, done) {
|
||||||
|
request(app)
|
||||||
|
.get('/users/confirm?uid=' + (result.uid + '_invalid')
|
||||||
|
+ '&token=' + encodeURIComponent(result.token)
|
||||||
|
+ '&redirect=' + encodeURIComponent(options.redirect))
|
||||||
|
.expect(404)
|
||||||
|
.end(function (err, res) {
|
||||||
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
|
assert(res.body.error);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
}, done);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Report error for invalid token during verification', function (done) {
|
||||||
|
testConfirm(function (result, done) {
|
||||||
|
request(app)
|
||||||
|
.get('/users/confirm?uid=' + result.uid
|
||||||
|
+ '&token=' + encodeURIComponent(result.token) + '_invalid'
|
||||||
|
+ '&redirect=' + encodeURIComponent(options.redirect))
|
||||||
|
.expect(400)
|
||||||
|
.end(function (err, res) {
|
||||||
|
if (err) return done(err);
|
||||||
|
assert(res.body.error);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
}, done);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue