Dados do usuário no Dashboard
Maravilha, a partir de agora já temos uma boa noção de como funciona o fluxo de autenticação do NextAuth.js.
Agora, vamos começar a “usar” alguns recursos da autenticação para criar páginas mais significativas para nossos usuários. A primeira coisa que faz sentido implementarmos (e inclusive vai trazer mais nitidez sobre o estado de login do usuário) é, no dashboard, mostrar o nome e o email do usuário.
Para isso, vamos pegar os dados da sessão.
Em nossa página de dashboard, vamos pegar a sessão simplesmente esperando a função auth()
.
Vamos ver o que essa função retorna fazendo um console.log()
.
import { auth } from '@/auth';import { Button, buttonVariants } from '@/components/ui/button';import { cn } from '@/lib/utils';import Link from 'next/link';
export default async function Dashboard() { const session = await auth(); console.log(session);
return ( <main className="container p-20 mx-auto text-center"> <div> <h1 className="font-extrabold text-slate-600 dark:text-transparent text-7xl dark:bg-gradient-to-r dark:from-slate-50 dark:via-slate-400 dark:to-slate-200 bg-clip-text"> Dashboard </h1> <h3 className="mt-4 font-bold text-muted-foreground">Boas vindas!</h3> <hr className="w-1/4 mx-auto mt-5 mb-16" />
<section className="flex flex-wrap items-center justify-center gap-3"> <form> <Button>Logout</Button> </form> <Link href="/" className={cn(buttonVariants({ variant: 'outline' }))}> Home </Link> </section> </div> </main> );}
Veja que, quando estamos deslogando, essa função retorna null
. E quando estamos logados ela retorna nossa sessão (que provavelmente possui uma chave expires
e um objeto user
):
Vamos usar esses dados para popular nosso dashboard!
Usando dados do User no Dashboard
Vamos alterar nossa página de dashboard mais uma vez:
import { auth } from '@/auth';import { Button, buttonVariants } from '@/components/ui/button';import { cn } from '@/lib/utils';import { User } from 'next-auth';import Link from 'next/link';
export default async function Dashboard() { let user = undefined; const session = await auth(); if (session) { user = session.user; }
return ( <main className="container p-20 mx-auto text-center"> <div> <h1 className="font-extrabold text-slate-600 dark:text-transparent text-7xl dark:bg-gradient-to-r dark:from-slate-50 dark:via-slate-400 dark:to-slate-200 bg-clip-text"> Dashboard </h1> <h3 className="mt-4 font-bold text-muted-foreground"> Boas vindas - {user?.name ?? ''} </h3> <p className="text-xs text-muted-foreground"> User Email: {user?.email ?? ''} </p> <hr className="w-1/4 mx-auto mt-5 mb-16" />
<section className="flex flex-wrap items-center justify-center gap-3"> <form> <Button>Logout</Button> </form> <Link href="/" className={cn(buttonVariants({ variant: 'outline' }))}> Home </Link> </section> </div> </main> );}
Agora, quando você estiver logado esses dados deverão aparecer: