Magic link authentication in Supabase - Time & Space Complexity
When using magic link authentication, it's important to know how the number of users affects the process time.
We want to understand how the system handles sending magic links as more users try to log in.
Analyze the time complexity of the following operation sequence.
const { data, error } = await supabase.auth.signInWithOtp({
email: userEmail,
options: { emailRedirectTo: 'https://example.com/welcome' }
});
This code sends a magic link email to a user to authenticate them without a password.
Identify the API calls, resource provisioning, data transfers that repeat.
- Primary operation: Sending a magic link email via the authentication API.
- How many times: Once per user login attempt.
Each login attempt triggers one email send operation, so the total work grows directly with the number of users.
| Input Size (n) | Approx. API Calls/Operations |
|---|---|
| 10 | 10 email sends |
| 100 | 100 email sends |
| 1000 | 1000 email sends |
Pattern observation: The number of email sends grows linearly as more users request magic links.
Time Complexity: O(n)
This means the time to send magic links grows directly in proportion to the number of login requests.
[X] Wrong: "Sending one magic link email handles all users at once, so time stays the same no matter how many users."
[OK] Correct: Each user needs their own email, so the system must send one email per user, making time grow with user count.
Understanding how user requests scale helps you design systems that handle growth smoothly and keep users happy.
"What if we batch magic link emails to send multiple at once? How would the time complexity change?"
Practice
Solution
Step 1: Understand magic link authentication
Magic link authentication lets users log in by clicking a special link sent to their email, avoiding passwords.Step 2: Compare options with this definition
Only Allow users to log in by clicking a link sent to their email without using a password describes login via email link without passwords, matching the magic link concept.Final Answer:
Allow users to log in by clicking a link sent to their email without using a password -> Option DQuick Check:
Magic link = login via email link without password [OK]
- Confusing magic link with password or biometric login
- Thinking magic link requires SMS codes
- Assuming social login is magic link
Solution
Step 1: Recall Supabase magic link method name
The correct method issignInWithOtpwith an object containing the email.Step 2: Match method and parameter format
supabase.auth.signInWithOtp({ email: 'user@example.com' }) usessignInWithOtpwith an object { email: '...' }, which is correct syntax.Final Answer:
supabase.auth.signInWithOtp({ email: 'user@example.com' }) -> Option BQuick Check:
Method name and parameter object = supabase.auth.signInWithOtp({ email: 'user@example.com' }) [OK]
- Using wrong method names like signInWithPassword
- Passing email as a string instead of an object
- Confusing method names with social login
const { data, error } = await supabase.auth.signInWithOtp({ email: 'test@example.com' });
console.log(data);
console.log(error);Solution
Step 1: Understand signInWithOtp behavior
This method sends a magic link to the email and returns data about the request, not user info immediately.Step 2: Analyze console output
Data contains confirmation info about sending the link; error is null if successful. No syntax error or invalid email here.Final Answer:
Send a magic link to 'test@example.com' and log data with confirmation info, error null -> Option AQuick Check:
signInWithOtp sends link, returns confirmation data [OK]
- Expecting immediate user info in data
- Thinking password is required
- Assuming invalid email error for valid format
await supabase.auth.signInWithOtp('user@example.com');What is the problem?
Solution
Step 1: Check method parameter format
signInWithOtp expects an object with an email property, not a plain string.Step 2: Identify why magic link is not sent
Passing a string causes the method to fail silently or not send the email, so users get no link.Final Answer:
The email should be passed inside an object, not as a string -> Option CQuick Check:
Email must be in object for signInWithOtp [OK]
- Passing email as string instead of object
- Thinking password is needed for magic link
- Using wrong method names
Solution
Step 1: Understand domain restriction needs
To restrict login to a domain, validate the email before sending magic link.Step 2: Choose best practice
Checking email domain in your app before calling signInWithOtp prevents sending links to unauthorized users.Final Answer:
Before calling signInWithOtp, check if email ends with '@example.com' and reject others -> Option AQuick Check:
Pre-check email domain before magic link send [OK]
- Sending magic links to all emails then filtering
- Thinking password is needed for domain restriction
- Assuming Supabase blocks domains automatically
Ready to prove it?
Pass the test and this pattern moves unknown
