Magic link authentication lets users sign in by clicking a link sent to their email. It is simple and secure without needing a password.
Magic link authentication in Supabase
const { data, error } = await supabase.auth.signInWithOtp({ email: 'user@example.com' })This code sends a magic link to the user's email.
You only need to provide the user's email address.
const { data, error } = await supabase.auth.signInWithOtp({ email: 'alice@example.com' })const { data, error } = await supabase.auth.signInWithOtp({ email: 'bob@example.com', options: { emailRedirectTo: 'https://yourapp.com/welcome' } })This program creates a Supabase client and sends a magic link to the specified email. It logs success or error messages.
import { createClient } from '@supabase/supabase-js' const supabaseUrl = 'https://xyzcompany.supabase.co' const supabaseKey = 'public-anonymous-key' const supabase = createClient(supabaseUrl, supabaseKey) async function sendMagicLink(email) { const { data, error } = await supabase.auth.signInWithOtp({ email }) if (error) { console.error('Error sending magic link:', error.message) } else { console.log('Magic link sent to:', email) } } sendMagicLink('user@example.com')
Make sure your Supabase project has email authentication enabled.
Users must check their email and click the link to complete login.
You can customize the redirect URL after login using the emailRedirectTo option.
Magic link authentication lets users log in without passwords by clicking a link sent to their email.
It improves user experience and security by avoiding passwords.
Supabase provides a simple method signInWithOtp to send magic links.
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
