Skip to content

Commit 4278056

Browse files
authored
Merge pull request #3195 from strongloop/backport/fix-hash-path-in-redirect
Fix creation of verification links
2 parents 4e8252a + 09b1fce commit 4278056

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

common/models/user.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ var isEmail = require('isemail');
1313
var loopback = require('../../lib/loopback');
1414
var utils = require('../../lib/utils');
1515
var path = require('path');
16+
var qs = require('querystring');
1617
var SALT_WORK_FACTOR = 10;
1718
var crypto = require('crypto');
1819
var MAX_PASSWORD_LENGTH = 72;
@@ -428,10 +429,10 @@ module.exports = function(User) {
428429
options.host +
429430
displayPort +
430431
urlPath +
431-
'?uid=' +
432-
options.user[pkName] +
433-
'&redirect=' +
434-
options.redirect;
432+
'?' + qs.stringify({
433+
uid: options.user[pkName],
434+
redirect: options.redirect,
435+
});
435436

436437
options.templateFn = options.templateFn || createVerificationEmailBody;
437438

test/user.test.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ require('./support');
77
var loopback = require('../');
88
var User, AccessToken;
99
var async = require('async');
10+
var url = require('url');
1011

1112
describe('User', function() {
1213
this.timeout(10000);
@@ -1700,6 +1701,29 @@ describe('User', function() {
17001701
expect(result.email).to.not.have.property('template');
17011702
});
17021703
});
1704+
1705+
it('allows hash fragment in redirectUrl', function() {
1706+
return User.create({email: '[email protected]', password: 'pass'})
1707+
.then(function(user) {
1708+
var actualVerifyHref;
1709+
return user.verify({
1710+
type: 'email',
1711+
to: user.email,
1712+
1713+
redirect: '#/some-path?a=1&b=2',
1714+
templateFn: function(options, cb) {
1715+
actualVerifyHref = options.verifyHref;
1716+
cb(null, 'dummy body');
1717+
},
1718+
})
1719+
.then(function() { return actualVerifyHref; });
1720+
})
1721+
.then(function(verifyHref) {
1722+
var parsed = url.parse(verifyHref, true);
1723+
expect(parsed.query.redirect, 'redirect query')
1724+
.to.equal('#/some-path?a=1&b=2');
1725+
});
1726+
});
17031727
});
17041728

17051729
describe('User.confirm(options, fn)', function() {

0 commit comments

Comments
 (0)