Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Client-side Session Access in Next.js
📖 Scenario: You are building a simple Next.js app that shows a welcome message to a user based on their session data stored on the client side.This is common in real websites where you want to greet logged-in users without reloading the page.
🎯 Goal: Build a Next.js page that reads a user name from client-side session storage and displays a personalized greeting.
📋 What You'll Learn
Create a React functional component in Next.js
Use the useEffect hook to access session storage on the client side
Store and read a user name string in session storage
Display the user name in a greeting message inside the component
Ensure the component only accesses session storage on the client side
💡 Why This Matters
🌍 Real World
Many web apps store user info in session or local storage to personalize pages without extra server calls.
💼 Career
Understanding client-side session access is key for frontend developers working with React and Next.js to build responsive user experiences.
Progress0 / 4 steps
1
Set up the Next.js page component
Create a React functional component called WelcomePage that returns a <div> with the text Loading... inside it.
NextJS
Hint
Start by writing a simple React function component that returns a div with 'Loading...'.
2
Add state to hold the user name
Inside the WelcomePage component, import useState from React and create a state variable called userName initialized to an empty string ''.
NextJS
Hint
Use useState('') to create a state variable userName and its setter setUserName.
3
Read user name from session storage on client side
Import useEffect from React. Inside WelcomePage, use useEffect with an empty dependency array to run code once on the client side. Inside it, read the userName from sessionStorage using sessionStorage.getItem('userName'). If a value exists, update the userName state using setUserName.
NextJS
Hint
Use useEffect to run code after the component mounts. Access sessionStorage only inside useEffect.
4
Display the greeting with the user name
Update the returned JSX inside WelcomePage to show <div>Hello, {userName}!</div> if userName is not empty. Otherwise, show <div>Loading...</div>.
NextJS
Hint
Use a conditional expression inside JSX to show the greeting only when userName is set.
Practice
(1/5)
1. What does the useSession hook from next-auth provide in a Next.js app?
easy
A. Access to the current user's session data and status on the client side
B. Server-side rendering of session data only
C. A way to store session data in local storage manually
D. Automatic user authentication without any configuration
Solution
Step 1: Understand the purpose of useSession
The useSession hook is designed to provide session data and status on the client side in Next.js apps using next-auth.
Step 2: Compare options with the hook's functionality
Access to the current user's session data and status on the client side correctly states it provides access to current user's session data and status. Other options describe unrelated or incorrect behaviors.
Final Answer:
Access to the current user's session data and status on the client side -> Option A
Quick Check:
useSession gives client session data = A [OK]
Hint: Remember: useSession is for client-side session info [OK]
Common Mistakes:
Thinking useSession works only server-side
Confusing useSession with local storage
Assuming useSession auto-authenticates without setup
2. Which of the following is the correct way to import and use useSession in a Next.js component?
easy
A. import { useSession } from 'next-auth/client'; const session = useSession();
B. import useSession from 'next-auth/client'; const session = useSession();
C. import { useSession } from 'next-auth/react'; const session = useSession.data;
D. import { useSession } from 'next-auth/react'; const { data: session } = useSession();
Solution
Step 1: Check the correct import path and usage
The official import for useSession in next-auth v4+ is from 'next-auth/react'. The hook returns an object with data and status.
Step 2: Validate the destructuring syntax
import { useSession } from 'next-auth/react'; const { data: session } = useSession(); correctly imports and destructures data as session. Other options use wrong import paths or incorrect usage.
Final Answer:
import { useSession } from 'next-auth/react'; const { data: session } = useSession(); -> Option D
Quick Check:
Correct import and destructuring = C [OK]
Hint: Use 'next-auth/react' and destructure data as session [OK]
Common Mistakes:
Importing from 'next-auth/client' which is outdated
Not destructuring the returned object
Accessing session data incorrectly
3. Given this Next.js component using useSession:
import { useSession } from 'next-auth/react';
export default function Profile() {
const { data: session, status } = useSession();
if (status === 'loading') return <p>Loading...</p>;
if (!session) return <p>Not signed in</p>;
return <p>Welcome, {session.user.name}!</p>;
}
What will be rendered if the user is signed in with name "Alex"?
medium
A.
Not signed in
B.
Loading...
C.
Welcome, Alex!
D. Nothing is rendered
Solution
Step 1: Understand the session states
The component shows "Loading..." if status is 'loading', "Not signed in" if no session, and welcome message if session exists.
Step 2: Apply the signed-in user condition
Since the user is signed in with name "Alex", session exists and status is not 'loading'. So it renders the welcome message with the user's name.
Final Answer:
<p>Welcome, Alex!</p> -> Option C
Quick Check:
Signed-in user shows welcome message = A [OK]
Hint: Check session presence to show welcome, else loading or sign-in [OK]
Common Mistakes:
Confusing loading and signed-in states
Assuming session.user.name is undefined
Ignoring the status check order
4. Identify the error in this Next.js component using useSession:
import { useSession } from 'next-auth/react';
export default function Dashboard() {
const session = useSession();
if (session.status === 'loading') return <p>Loading...</p>;
if (!session.data) return <p>Please sign in</p>;
return <p>Hello, {session.user.name}</p>;
}
medium
A. Accessing session.user.name directly instead of session.data.user.name
B. Incorrect import path for useSession
C. Missing useEffect to fetch session
D. Using session.status instead of session.state
Solution
Step 1: Check how useSession returns data
useSession returns an object with data and status. The user info is inside data.user.
Step 2: Identify incorrect property access
The code tries to access session.user.name directly, but it should be session.data.user.name. This causes an error.
Final Answer:
Accessing session.user.name directly instead of session.data.user.name -> Option A
Quick Check:
Use session.data.user for user info, not session.user [OK]
Hint: Remember session data is in session.data, not top-level [OK]
Common Mistakes:
Accessing user info directly on session object
Confusing status property names
Adding unnecessary hooks like useEffect
5. You want to show a personalized greeting only if the user is signed in and their email is verified in the session. Given useSession returns { data: session, status }, which code snippet correctly implements this in a Next.js component?
hard
A. if (!session) return
Please verify your email
;
if (status === 'loading') return
Loading...
;
return
Welcome back, {session.user.name}!
;
B. if (status === 'loading') return
Loading...
;
if (!session || !session.user.emailVerified) return
Please verify your email
;
return
Welcome back, {session.user.name}!
;
C. if (status === 'loading') return
Loading...
;
if (!session.user.emailVerified) return
Please verify your email
;
return
Welcome back, {session.user.name}!
;
D. if (status === 'loading') return
Loading...
;
if (!session || session.user.emailVerified) return
Please verify your email
;
return
Welcome back, {session.user.name}!
;
Solution
Step 1: Check loading state first
Always handle status === 'loading' first to avoid rendering before session is ready.
Step 2: Verify session existence and email verification
We must check if session exists and if session.user.emailVerified is true. If not, show the verification message.
Step 3: Render personalized greeting if checks pass
If session exists and email is verified, show welcome message with user name.
Final Answer:
if (status === 'loading') return <p>Loading...</p>;
if (!session || !session.user.emailVerified) return <p>Please verify your email</p>;
return <p>Welcome back, {session.user.name}!</p>; -> Option B
Quick Check:
Check loading, then session and emailVerified before greeting [OK]
Hint: Check loading first, then session and emailVerified [OK]
Common Mistakes:
Checking session after loading state
Not verifying session existence before accessing properties