Authentication needs server-side logic to keep user information safe and check who you really are. The server controls access and protects secrets.
Why authentication needs server-side logic in Astro
export async function POST({ request }) { const data = await request.json(); const { username, password } = data; // Check username and password on server if (username === 'user' && password === 'pass') { return new Response(JSON.stringify({ success: true }), { status: 200 }); } return new Response(JSON.stringify({ success: false }), { status: 401 }); }
This example shows server-side logic in an Astro API route.
The server checks credentials and returns success or failure.
export async function POST({ request }) { const { token } = await request.json(); // Verify token on server if (token === 'valid-token') { return new Response('Access granted', { status: 200 }); } return new Response('Access denied', { status: 403 }); }
export async function GET() { // Server sends user info only if authenticated const user = { name: 'Alice', role: 'admin' }; return new Response(JSON.stringify(user), { status: 200 }); }
This Astro server-side function handles login requests. It reads username and password from the request, checks them, and returns a success or error message. This keeps the password check secure on the server, not in the browser.
import { json } from 'astro'; export async function POST({ request }) { const { username, password } = await request.json(); // Simple check for demo (never store passwords like this!) if (username === 'astroUser' && password === 'astroPass') { return json({ message: 'Login successful' }, { status: 200 }); } return json({ message: 'Invalid credentials' }, { status: 401 }); }
Never check passwords on the client side; always do it on the server.
Server-side logic protects against hackers trying to fake identities.
Use secure methods to store and compare passwords, like hashing.
Authentication must happen on the server to keep data safe.
Server checks user info and controls access to private parts.
Client only sends info; server decides if it is correct.
Practice
Solution
Step 1: Understand the role of server in authentication
The server securely stores user data and verifies credentials to protect sensitive information.Step 2: Recognize client limitations
The client cannot be trusted to securely store or verify credentials because it can be manipulated.Final Answer:
Because the server can securely check user credentials and control access -> Option BQuick Check:
Server handles security = D [OK]
- Thinking client can safely store passwords
- Believing client can decide access alone
- Ignoring security risks on client side
Solution
Step 1: Identify correct HTTP method for sending login data
Login data should be sent using POST to keep data in the request body, not URL.Step 2: Check data format in request body
Data should be JSON stringified for proper parsing on server side.Final Answer:
fetch('/login', { method: 'POST', body: JSON.stringify({username, password}) }) -> Option CQuick Check:
POST with JSON body = B [OK]
- Using GET method which exposes data in URL
- Sending raw concatenated strings instead of JSON
- Omitting the request body
export async function post({ request }) {
const { username, password } = await request.json();
if (username === 'user' && password === 'pass') {
return new Response('Success', { status: 200 });
} else {
return new Response('Fail', { status: 401 });
}
}What will the server respond if the client sends username='user' and password='wrong'?
Solution
Step 1: Check the condition for successful login
The server checks if username is 'user' and password is 'pass' exactly.Step 2: Evaluate given input against condition
Input password is 'wrong', which does not match 'pass', so condition fails.Final Answer:
Fail with status 401 -> Option AQuick Check:
Wrong password = 401 Fail [OK]
- Assuming any password works
- Confusing status codes
- Ignoring the else branch
export async function post({ request }) {
const { username, password } = await request.json();
if (username = 'admin' && password = '1234') {
return new Response('Logged in', { status: 200 });
}
return new Response('Unauthorized', { status: 401 });
}What is the bug and how to fix it?
Solution
Step 1: Identify incorrect operator in condition
The code uses '=' which is assignment, not comparison, causing a bug.Step 2: Use strict equality '===' for comparison in JavaScript
Replace '=' with '===' to correctly compare values in the if condition.Final Answer:
Use '===' instead of '=' in the if condition -> Option AQuick Check:
Comparison needs '===' not '=' [OK]
- Confusing assignment '=' with comparison '==' or '==='
- Removing await which is needed
- Changing response type unnecessarily
Solution
Step 1: Understand server-side protection needs
Server must verify user identity before sending private content to prevent unauthorized access.Step 2: Use session cookies for authentication
Session cookies are sent with requests and can be checked on the server to confirm login status.Final Answer:
Check a session cookie on the server and redirect if missing -> Option DQuick Check:
Server checks session cookie before rendering [OK]
- Relying on client-side checks only
- Using localStorage which can be manipulated
- Rendering private content before login check
Ready to prove it?
Pass the test and this pattern moves unknown
