felipemotarocha / fullstackweek-store

https://fullstackweek-store.vercel.app
243 stars 82 forks source link

fix: ensure orders is shown only for authenticated user #10

Closed ghost closed 1 year ago

ghost commented 1 year ago

A pagina de Orders está listando TODOS os pedidos criados, independente do usuário autenticado, e mesmo que não exista nenhum usuário autenticado.

Correção: No arquivo src/app/orders/page.tsx Trocar de:

const user = getServerSession(authOptions);

Para:

const session = await getServerSession(authOptions);

A alteração acima foi feita porque o método getServerSession retorna uma Promisse de uma Session. Como o objeto User existe apenas dentro da Session, podemos posteriormente pegar o user através de session.user.

Outras alterações: Alterado a condicional para validar se existe uma sessão ou um user. De:

if (!user) {
    return <p>Access Denied</p>;
  }

Para:

if (!session || !session.user) {
    return <p>Access Denied</p>;
  }

Aterado a query do prisma para utilizar o valor correto e retirado o "as any". De:

where: {
      userId: (user as any).id,
    }

Para:

where: {
      userId: session.user.id,
    },

Por fim, para evitar erros de typescript referente a propriedade id do objeto User foi criado uma tipagem extendendo a tipagem original do NextAuth (conforme doc oficial)

Arquivo src/@types/next-auth.d.ts

import { DefaultSession } from "next-auth";

declare module "next-auth" {
  /**
   * Returned by `useSession`, `getSession` and received as a prop on the `SessionProvider` React Context
   */
  interface Session {
    user: {
      /** The user's postal address. */
      id: string;
    } & DefaultSession["user"];
  }
}

Com as alterações acima propostas o resultado da página Orders sem usuário logado é o abaixo, conforme esperado. image

fix #8

vercel[bot] commented 1 year ago

Someone is attempting to deploy a commit to a Personal Account owned by @felipemotarocha on Vercel.

@felipemotarocha first needs to authorize it.

ghost commented 1 year ago

Aproveitei para criar uma visualização melhorar um pouco a tela de Acesso negado mostrada na página.

felipemotarocha commented 1 year ago

@aledosreis ótimo PR, meu mano! A adição na tipagem ficou sensacional também! 🚀

vercel[bot] commented 1 year ago

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
fullstackweek-store ✅ Ready (Inspect) Visit Preview 💬 Add feedback Oct 25, 2023 11:27pm