diff --git a/dashboard/15-final/app/api/auth/[...nextauth]/route.ts b/dashboard/15-final/app/api/auth/[...nextauth]/route.ts index f94a137..74197d2 100644 --- a/dashboard/15-final/app/api/auth/[...nextauth]/route.ts +++ b/dashboard/15-final/app/api/auth/[...nextauth]/route.ts @@ -1,4 +1,2 @@ -import { handlers } from '@/auth'; - -const { GET, POST } = handlers; -export { GET, POST }; +export { GET, POST } from '@/auth'; +export const runtime = 'edge'; diff --git a/dashboard/15-final/app/login/page.tsx b/dashboard/15-final/app/login/page.tsx index 791e49e..f0743ff 100644 --- a/dashboard/15-final/app/login/page.tsx +++ b/dashboard/15-final/app/login/page.tsx @@ -1,11 +1,6 @@ import LoginForm from '@/app/ui/login-form'; -import { auth } from '@/auth'; -import { redirect } from 'next/navigation'; export default async function Page() { - const session = await auth(); - if (session) redirect('/dashboard'); - return (
diff --git a/dashboard/15-final/app/ui/dashboard/acme-logo.tsx b/dashboard/15-final/app/ui/dashboard/acme-logo.tsx deleted file mode 100644 index 083e0bf..0000000 --- a/dashboard/15-final/app/ui/dashboard/acme-logo.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react'; - -const LogoIcon: React.FC = () => { - return ( - - - - - - - - - - - - ); -}; - -export default LogoIcon; diff --git a/dashboard/15-final/app/ui/dashboard/sidenav.tsx b/dashboard/15-final/app/ui/dashboard/sidenav.tsx index 4dd726c..4099b32 100644 --- a/dashboard/15-final/app/ui/dashboard/sidenav.tsx +++ b/dashboard/15-final/app/ui/dashboard/sidenav.tsx @@ -1,7 +1,7 @@ import Link from 'next/link'; import NavLinks from '@/app/ui/dashboard/nav-links'; import LogOutButton from './log-out-button'; -import AcmeLogo from '../acme-logo'; +import AcmeLogo from '@/app/ui/acme-logo'; export default function SideNav() { return ( diff --git a/dashboard/15-final/app/ui/login-form.tsx b/dashboard/15-final/app/ui/login-form.tsx index 08c6b9d..0171cc8 100644 --- a/dashboard/15-final/app/ui/login-form.tsx +++ b/dashboard/15-final/app/ui/login-form.tsx @@ -4,10 +4,10 @@ import { signIn } from 'next-auth/react'; import { useRouter } from 'next/navigation'; import React, { useState } from 'react'; import { lusitana } from '@/app/ui/fonts'; +import AcmeLogo from '@/app/ui/acme-logo'; import { AtSymbolIcon, KeyIcon } from '@heroicons/react/24/outline'; import { Button } from './button'; import { ArrowRightIcon } from '@heroicons/react/20/solid'; -import AcmeLogo from './acme-logo'; export default function LoginForm() { const [email, setEmail] = useState(''); diff --git a/dashboard/15-final/auth.ts b/dashboard/15-final/auth.ts index fe2e80d..a4f19a6 100644 --- a/dashboard/15-final/auth.ts +++ b/dashboard/15-final/auth.ts @@ -1,7 +1,5 @@ import NextAuth from 'next-auth'; -import type { NextAuthConfig } from 'next-auth'; import Credentials from 'next-auth/providers/credentials'; -import GitHub from 'next-auth/providers/github'; import bcrypt from 'bcrypt'; import { User } from '@/app/lib/definitions'; import { sql } from '@vercel/postgres'; @@ -16,9 +14,12 @@ async function getUser(email: string) { } } -export const authConfig = { +export const { + handlers: { GET, POST }, + auth, + CSRF_experimental, +} = NextAuth({ providers: [ - GitHub, Credentials({ name: 'Sign-In with Credentials', credentials: { @@ -49,6 +50,4 @@ export const authConfig = { pages: { signIn: '/login', }, -} satisfies NextAuthConfig; - -export const { handlers, auth, signIn, signOut } = NextAuth(authConfig); +}); diff --git a/dashboard/15-final/middleware.ts b/dashboard/15-final/middleware.ts index 7f5762d..449e3f2 100644 --- a/dashboard/15-final/middleware.ts +++ b/dashboard/15-final/middleware.ts @@ -1,6 +1,4 @@ -import { auth } from './auth'; - -export const middleware = auth; +export { auth as middleware } from './auth'; export const config = { matcher: ['/dashboard/:path*'], diff --git a/dashboard/15-final/package.json b/dashboard/15-final/package.json index ec22cbc..2295252 100644 --- a/dashboard/15-final/package.json +++ b/dashboard/15-final/package.json @@ -18,7 +18,7 @@ "bcrypt": "^5.1.1", "clsx": "^2.0.0", "next": "13.5.5-canary.4", - "next-auth": "0.0.0-pr.8775.a98a849e", + "next-auth": "0.0.0-manual.83c4ebd1", "postcss": "8.4.31", "react": "18.2.0", "react-dom": "18.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8e27d24..20cd346 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -244,8 +244,8 @@ importers: specifier: 13.5.5-canary.4 version: 13.5.5-canary.4(@babel/core@7.23.0)(react-dom@18.2.0)(react@18.2.0) next-auth: - specifier: 0.0.0-pr.8775.a98a849e - version: 0.0.0-pr.8775.a98a849e(next@13.5.5-canary.4)(react-dom@18.2.0)(react@18.2.0) + specifier: 0.0.0-manual.83c4ebd1 + version: 0.0.0-manual.83c4ebd1(next@13.5.5-canary.4)(react@18.2.0) postcss: specifier: 8.4.31 version: 8.4.31 @@ -321,6 +321,22 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.19 + /@auth/core@0.0.0-manual.e9863699: + resolution: {integrity: sha512-/hVzGuFw7nAZimliD8kpuKnNjvkRu+jpaVhYB/FaIXLNJFNwhbO2MgXBnr5tvLIHgRJnR5C9UN5RNpQXiFHuSA==} + peerDependencies: + nodemailer: ^6.8.0 + peerDependenciesMeta: + nodemailer: + optional: true + dependencies: + '@panva/hkdf': 1.1.1 + cookie: 0.5.0 + jose: 4.15.2 + oauth4webapi: 2.3.0 + preact: 10.11.3 + preact-render-to-string: 5.2.3(preact@10.11.3) + dev: false + /@babel/code-frame@7.22.13: resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} engines: {node: '>=6.9.0'} @@ -3813,29 +3829,19 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /next-auth@0.0.0-pr.8775.a98a849e(next@13.5.5-canary.4)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-bPi6hzs3LCNYvm7m6vTzB8bvRqiI6ZPh9C5URVpg4fwakOgZLmOla3sLJ8umqPHKNpeNnyICuqy5NL/0khpHAA==} + /next-auth@0.0.0-manual.83c4ebd1(next@13.5.5-canary.4)(react@18.2.0): + resolution: {integrity: sha512-6nUXtVrZqTWvVz2NhUB/xbMyzxUSQycQWOquACwdpk63AcnZ3g01v+W0UX9paqkGIdqLPtI/pL6rA2N+MT58SQ==} peerDependencies: - next: ^12.2.5 || ^13 + next: ^13.4.6 nodemailer: ^6.6.5 - react: ^17.0.2 || ^18 - react-dom: ^17.0.2 || ^18 + react: ^18.2.0 peerDependenciesMeta: nodemailer: optional: true dependencies: - '@babel/runtime': 7.23.1 - '@panva/hkdf': 1.1.1 - cookie: 0.5.0 - jose: 4.15.2 + '@auth/core': 0.0.0-manual.e9863699 next: 13.5.5-canary.4(@babel/core@7.23.0)(react-dom@18.2.0)(react@18.2.0) - oauth: 0.9.15 - openid-client: 5.6.0 - preact: 10.11.3 - preact-render-to-string: 5.2.3(preact@10.11.3) react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - uuid: 8.3.2 dev: false /next@13.5.3(@babel/core@7.23.0)(react-dom@18.2.0)(react@18.2.0): @@ -4030,19 +4036,14 @@ packages: set-blocking: 2.0.0 dev: false - /oauth@0.9.15: - resolution: {integrity: sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==} + /oauth4webapi@2.3.0: + resolution: {integrity: sha512-JGkb5doGrwzVDuHwgrR4nHJayzN4h59VCed6EW8Tql6iHDfZIabCJvg6wtbn5q6pyB2hZruI3b77Nudvq7NmvA==} dev: false /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - /object-hash@2.2.0: - resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} - engines: {node: '>= 6'} - dev: false - /object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} @@ -4110,11 +4111,6 @@ packages: es-abstract: 1.22.2 dev: true - /oidc-token-hash@5.0.3: - resolution: {integrity: sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==} - engines: {node: ^10.13.0 || >=12.0.0} - dev: false - /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -4144,15 +4140,6 @@ packages: is-wsl: 2.2.0 dev: true - /openid-client@5.6.0: - resolution: {integrity: sha512-uFTkN/iqgKvSnmpVAS/T6SNThukRMBcmymTQ71Ngus1F60tdtKVap7zCrleocY+fogPtpmoxi5Q1YdrgYuTlkA==} - dependencies: - jose: 4.15.2 - lru-cache: 6.0.0 - object-hash: 2.2.0 - oidc-token-hash: 5.0.3 - dev: false - /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -5387,11 +5374,6 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: false - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: false - /uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} engines: {node: '>=8'}