.
Before diving right into the real code implementation, let’s take a step back and see what this flow looks like in pseudocode and why developing this application might be more complex than you think. var mostRecentAttempt // possible values for mostRecentAttempt are: // codeExpired // incorrectCode