Merge pull request #1120 from PradnyaBaviskar/lb-issue-416

Fix "User.confirm" to always call afterRemote hook

Close #1120
This commit is contained in:
Miroslav Bajtoš 2015-02-25 14:23:50 +01:00
commit 3c43eccac7
3 changed files with 31 additions and 16 deletions

View File

@ -567,7 +567,7 @@ module.exports = function(User) {
accepts: [ accepts: [
{arg: 'uid', type: 'string', required: true}, {arg: 'uid', type: 'string', required: true},
{arg: 'token', type: 'string', required: true}, {arg: 'token', type: 'string', required: true},
{arg: 'redirect', type: 'string', required: true} {arg: 'redirect', type: 'string'}
], ],
http: {verb: 'get', path: '/confirm'} http: {verb: 'get', path: '/confirm'}
} }
@ -586,21 +586,14 @@ module.exports = function(User) {
UserModel.on('attached', function() { UserModel.on('attached', function() {
UserModel.afterRemote('confirm', function(ctx, inst, next) { UserModel.afterRemote('confirm', function(ctx, inst, next) {
if (ctx.req) { if (ctx.args.redirect !== undefined) {
// replacement for deprecated req.param() if (!ctx.res) {
var params = ctx.req.params; return next(new Error('The transport does not support HTTP redirects.'));
var body = ctx.req.body;
var query = ctx.req.query;
var redirectUrl =
params && params.redirect !== undefined ? params.redirect :
body && body.redirect !== undefined ? body.redirect :
query && query.redirect !== undefined ? query.redirect :
undefined;
ctx.res.redirect(redirectUrl);
} else {
next(new Error('transport unsupported'));
} }
ctx.res.location(ctx.args.redirect);
ctx.res.status(302);
}
next();
}); });
}); });

View File

@ -47,7 +47,7 @@
"nodemailer-stub-transport": "~0.1.4", "nodemailer-stub-transport": "~0.1.4",
"serve-favicon": "^2.1.6", "serve-favicon": "^2.1.6",
"stable": "^0.1.5", "stable": "^0.1.5",
"strong-remoting": "^2.11.0", "strong-remoting": "^2.13.2",
"uid2": "0.0.3", "uid2": "0.0.3",
"underscore.string": "~2.3.3" "underscore.string": "~2.3.3"
}, },

View File

@ -865,6 +865,28 @@ describe('User', function() {
}, done); }, done);
}); });
it('Should report 302 when redirect url is set', function(done) {
testConfirm(function(result, done) {
request(app)
.get('/users/confirm?uid=' + (result.uid) +
'&token=' + encodeURIComponent(result.token) +
'&redirect=http://foo.com/bar')
.expect(302)
.expect('Location', 'http://foo.com/bar')
.end(done);
}, done);
});
it('Should report 204 when redirect url is not set', function(done) {
testConfirm(function(result, done) {
request(app)
.get('/users/confirm?uid=' + (result.uid) +
'&token=' + encodeURIComponent(result.token))
.expect(204)
.end(done);
}, done);
});
it('Report error for invalid user id during verification', function(done) { it('Report error for invalid user id during verification', function(done) {
testConfirm(function(result, done) { testConfirm(function(result, done) {
request(app) request(app)