30 | Já possui cadastro?{' '} 31 | 32 | Faça o login 33 | 34 | . 35 |
36 | > 37 | ); 38 | } 39 | -------------------------------------------------------------------------------- /app/(auth)/cadastro/register-form.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { Button } from '@/components/ui/button'; 4 | import { Input } from '@/components/ui/input'; 5 | import { Label } from '@/components/ui/label'; 6 | import registerAction from './registerAction'; 7 | import { useActionState } from 'react'; 8 | import Form from 'next/form'; 9 | 10 | export default function RegisterForm() { 11 | const [state, formAction, isPending] = useActionState(registerAction, null); 12 | 13 | return ( 14 | <> 15 | {state?.success === false && ( 16 |30 | Não possui cadastro?{' '} 31 | 32 | Registre-se 33 | 34 | . 35 |
36 | > 37 | ); 38 | } 39 | -------------------------------------------------------------------------------- /app/api/auth/[...nextauth]/route.ts: -------------------------------------------------------------------------------- 1 | import { handlers } from '@/auth'; 2 | 3 | // Referring to the auth.ts we just created 4 | export const { GET, POST } = handlers; 5 | -------------------------------------------------------------------------------- /app/assets/logo.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /app/assets/noise.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/assets/woman.svg: -------------------------------------------------------------------------------- 1 | 55 | -------------------------------------------------------------------------------- /app/dashboard/book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codante-io/mp-saas-com-nextjs-e-stripe/ea60f37b5d1b7b57e7afff699ea9c14a5ec3167f/app/dashboard/book.png -------------------------------------------------------------------------------- /app/dashboard/layout.tsx: -------------------------------------------------------------------------------- 1 | import Navbar from './navbar'; 2 | import { auth } from '@/auth'; 3 | import { redirect } from 'next/navigation'; 4 | 5 | export default async function DashboardLayout({ 6 | children, 7 | }: { 8 | children: React.ReactNode; 9 | }) { 10 | const session = await auth(); 11 | const userName = session?.user?.name; 12 | 13 | if (!session) { 14 | redirect('/login'); 15 | } 16 | 17 | return ( 18 |69 | Deixe que nós fazemos a curadoria para você. Assine nossa plataforma e 70 | receba todos os meses um ebook novo de programação. 71 |
72 | 85 |119 | Pra que inúmeros planos quando nós sabemos exatamente o que é melhor 120 | para você? Assine o nosso plano mensal Pro Premium VIP e garanta 121 | mensalmente um ebook novo de programação. E por menos de um café por 122 | dia. 123 |
124 | 125 |134 | Faça como milhares de outras pessoas. Assine nosso produto e tenha 135 | garantido seus estudos{' '} 136 |
137 | 138 |139 | Comece sua assinatura agora mesmo. Cancele quando quiser.{' '} 140 |
141 | 147 |{text}
12 |23 | R$29 24 | 25 | /mês 26 | {' '} 27 |
28 |