feat: protect api routes and fetch user data from /api/profile

This commit is contained in:
Riccardo
2024-06-26 14:28:11 +02:00
parent d052cbef4c
commit 571ab92273
4 changed files with 35 additions and 19 deletions

11
app/api/profile/route.ts Normal file
View File

@@ -0,0 +1,11 @@
import { NextResponse } from 'next/server';
import { getSession, withApiAuthRequired } from '@auth0/nextjs-auth0';
const GET = withApiAuthRequired(async () => {
const session = await getSession();
return NextResponse.json(session?.user);
});
export { GET };

23
app/profile/page.tsx Normal file
View File

@@ -0,0 +1,23 @@
'use client';
import { withPageAuthRequired } from '@auth0/nextjs-auth0/client';
import { useEffect, useState } from 'react';
export default withPageAuthRequired(function Profile() {
const [user, setUser] = useState();
useEffect(() => {
(async () => {
const res = await fetch(`${window.location.origin}/api/profile`);
setUser(await res.json());
})();
}, []);
return (
<main>
<h1>Profile (fetched from API)</h1>
<h3>User</h3>
<pre data-testid='module'>{JSON.stringify(user, null, 2)}</pre>
</main>
);
});

View File

@@ -1,18 +0,0 @@
'use client';
import { useUser } from '@auth0/nextjs-auth0/client';
export default function ProfileClient() {
const { user, error, isLoading } = useUser();
if (isLoading) return <div>Loading...</div>;
if (error) return <div>{error.message}</div>;
return (
user && (
<div>
<p>{user.email}</p>
</div>
)
);
}