- Affected version
- v2.0.7
We are getting a large number of registration failures (upto 40% failure rate) being reported on a new system where a small set of users have been invited to join.
One of the symptoms is the user completes the registration form correctly and then gets presented with a blank registration form. This is sporadic and can not be reproduced at will. The typical user device is a low powered Android smartphone.
We have tracked the blank form issue to the startTime check in \Services\User\RegisterForm in isValidRegistrationAttempt:
if (!$this->startTime || ($this->startTime + $options->registrationTimer) > time())
In the failed cases the $this->startTime has the same value as time() call returns. I logged $this->startTime, $options->registrationTimer, and time() and was given 1532520108, 15, 1532520108.
I personally managed to recreate the error just once. I was using an Android mobile phone, filled out the registration form correctly and then waited some time for the phone screen saver to kick in. I then unlocked the phone and hit the register button. The above code rejected my registration. I could only create this failure once. I was able to successfully register at least 10 other times by following the exact same procedure. Sometimes I waited as long as 5 minutes to submit. I mention this since maybe the time delay is involved in some way?
Additional background info:
The user registration process is slow as there are a large number of data fields that get collected as the system builds "areas of interest" user profile information. There are also 6 mandatory fields and a question captcha required. For new users the large amount of fields most likely means that it will take several minutes to fill in the registration form.
On the failed registration attempts all of the form data was filled in correctly (we watched them do it).
None of the failed registration attempts have come from automated bots (so they had to wait 15 seconds for the Registration button to become active at the bottom of the screen).
So the basic question is: Why does the RegisterForm object sometimes have a current timestamp? i.e. $this->startTime == time()
One of the symptoms is the user completes the registration form correctly and then gets presented with a blank registration form. This is sporadic and can not be reproduced at will. The typical user device is a low powered Android smartphone.
We have tracked the blank form issue to the startTime check in \Services\User\RegisterForm in isValidRegistrationAttempt:
if (!$this->startTime || ($this->startTime + $options->registrationTimer) > time())
In the failed cases the $this->startTime has the same value as time() call returns. I logged $this->startTime, $options->registrationTimer, and time() and was given 1532520108, 15, 1532520108.
I personally managed to recreate the error just once. I was using an Android mobile phone, filled out the registration form correctly and then waited some time for the phone screen saver to kick in. I then unlocked the phone and hit the register button. The above code rejected my registration. I could only create this failure once. I was able to successfully register at least 10 other times by following the exact same procedure. Sometimes I waited as long as 5 minutes to submit. I mention this since maybe the time delay is involved in some way?
Additional background info:
The user registration process is slow as there are a large number of data fields that get collected as the system builds "areas of interest" user profile information. There are also 6 mandatory fields and a question captcha required. For new users the large amount of fields most likely means that it will take several minutes to fill in the registration form.
On the failed registration attempts all of the form data was filled in correctly (we watched them do it).
None of the failed registration attempts have come from automated bots (so they had to wait 15 seconds for the Registration button to become active at the bottom of the screen).
So the basic question is: Why does the RegisterForm object sometimes have a current timestamp? i.e. $this->startTime == time()