diff --git a/src/Signup.js b/src/Signup.js index 18d338cc32..e387513c90 100644 --- a/src/Signup.js +++ b/src/Signup.js @@ -130,6 +130,18 @@ class Register extends Signup { this.password = password; const client = this._createTemporaryClient(); this.activeStage = null; + + // If there hasn't been a client secret set by this point, + // generate one for this session. It will only be used if + // we do email verification, but far simpler to just make + // sure we have one. + // We re-use this same secret over multiple calls to register + // so that the identity server can honour the sendAttempt + // parameter and not re-send email unless we actually want + // another mail to be sent. + if (!this.params.clientSecret) { + this.params.clientSecret = client.generateClientSecret(); + } return this._tryRegister(client); } diff --git a/src/SignupStages.js b/src/SignupStages.js index 72e789e6a6..283b11afef 100644 --- a/src/SignupStages.js +++ b/src/SignupStages.js @@ -116,7 +116,11 @@ class EmailIdentityStage extends Stage { return this._completeVerify(); } - this.clientSecret = this.client.generateClientSecret(); + this.clientSecret = this.signupInstance.params.clientSecret; + if (!this.clientSecret) { + return q.reject(new Error("No client secret specified by Signup class!")); + } + var nextLink = this.signupInstance.params.registrationUrl + '?client_secret=' + encodeURIComponent(this.clientSecret) +