diff --git a/src/app/forgot/student/abstract-forgot-student-password.component.ts b/src/app/forgot/student/abstract-forgot-student-password.component.ts
new file mode 100644
index 00000000000..08a56a1e1bb
--- /dev/null
+++ b/src/app/forgot/student/abstract-forgot-student-password.component.ts
@@ -0,0 +1,32 @@
+import { Directive } from '@angular/core';
+import { FormGroup } from '@angular/forms';
+
+@Directive()
+export abstract class AbstractForgotStudentPasswordComponent {
+ protected message: string = '';
+ protected processing: boolean = false;
+ protected showForgotPasswordLink: boolean = false;
+
+ protected abstract getFormGroup(): FormGroup;
+
+ /**
+ * The server temporarily blocks the reset after several incorrect security answers. Disabling
+ * the form stops the student from immediately trying again, and the link sends them back to the
+ * start of the flow. Unlike the teacher flow there is no new verification code to generate, so
+ * the message asks them to wait or to ask their teacher rather than promising the link unblocks
+ * them.
+ */
+ protected tooManyFailedAnswerAttempts(): void {
+ this.message = $localize`You have entered an incorrect answer too many times. For security reasons, we will lock the ability to change your password for 10 minutes. After 10 minutes, please go back to the Forgot Student Password page to try again, or ask your teacher to change your password.`;
+ this.getFormGroup().disable();
+ this.showForgotPasswordLink = true;
+ }
+
+ protected setErrorOccurredMessage(): void {
+ this.message = $localize`An error occurred. Please try again.`;
+ }
+
+ protected clearMessage(): void {
+ this.message = '';
+ }
+}
diff --git a/src/app/forgot/student/forgot-student-password-change/forgot-student-password-change.component.html b/src/app/forgot/student/forgot-student-password-change/forgot-student-password-change.component.html
index 2ff0193d36a..eb895350d2e 100644
--- a/src/app/forgot/student/forgot-student-password-change/forgot-student-password-change.component.html
+++ b/src/app/forgot/student/forgot-student-password-change/forgot-student-password-change.component.html
@@ -2,9 +2,6 @@
+