@@ -736,22 +736,32 @@ module.exports = function(User) {
736736 ( verifyOptions . protocol === 'https' && verifyOptions . port == '443' )
737737 ) ? '' : ':' + verifyOptions . port ;
738738
739- var urlPath = joinUrlPath (
740- verifyOptions . restApiRoot ,
741- userModel . http . path ,
742- userModel . sharedClass . findMethodByName ( 'confirm' ) . http . path
743- ) ;
739+ if ( ! verifyOptions . verifyHref ) {
740+ const confirmMethod = userModel . sharedClass . findMethodByName ( 'confirm' ) ;
741+ if ( ! confirmMethod ) {
742+ throw new Error (
743+ 'Cannot build user verification URL, ' +
744+ 'the default confirm method is not public. ' +
745+ 'Please provide the URL in verifyOptions.verifyHref.' ) ;
746+ }
744747
745- verifyOptions . verifyHref = verifyOptions . verifyHref ||
746- verifyOptions . protocol +
747- '://' +
748- verifyOptions . host +
749- displayPort +
750- urlPath +
751- '?' + qs . stringify ( {
752- uid : '' + verifyOptions . user [ pkName ] ,
753- redirect : verifyOptions . redirect ,
754- } ) ;
748+ const urlPath = joinUrlPath (
749+ verifyOptions . restApiRoot ,
750+ userModel . http . path ,
751+ confirmMethod . http . path
752+ ) ;
753+
754+ verifyOptions . verifyHref =
755+ verifyOptions . protocol +
756+ '://' +
757+ verifyOptions . host +
758+ displayPort +
759+ urlPath +
760+ '?' + qs . stringify ( {
761+ uid : '' + verifyOptions . user [ pkName ] ,
762+ redirect : verifyOptions . redirect ,
763+ } ) ;
764+ }
755765
756766 verifyOptions . to = verifyOptions . to || user . email ;
757767 verifyOptions . subject = verifyOptions . subject || g . f ( 'Thanks for Registering' ) ;
@@ -779,7 +789,10 @@ module.exports = function(User) {
779789
780790 // TODO - support more verification types
781791 function sendEmail ( user ) {
782- verifyOptions . verifyHref += '&token=' + user . verificationToken ;
792+ verifyOptions . verifyHref +=
793+ verifyOptions . verifyHref . indexOf ( '?' ) === - 1 ? '?' : '&' ;
794+ verifyOptions . verifyHref += 'token=' + user . verificationToken ;
795+
783796 verifyOptions . verificationToken = user . verificationToken ;
784797 verifyOptions . text = verifyOptions . text || g . f ( 'Please verify your email by opening ' +
785798 'this link in a web browser:\n\t%s' , verifyOptions . verifyHref ) ;
0 commit comments