From 9416bbaa057b8599895bda6400aacfa5452ec75a Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Sat, 9 Sep 2023 20:05:10 -0500 Subject: [PATCH] feat: wire up clerk + Add convex provider with clerk + Add clerk provider + Add account page + Add login page + Add sign up page + Add clerk middleware + Add Navbar component --- .vscode/settings.json | 3 ++- convex/auth.config.js | 10 ++++++++ src/app/account/[[...account]]/page.tsx | 9 +++++++ src/app/layout.tsx | 21 ++++++++++++++--- src/app/login/[[...login]]/page.tsx | 9 +++++++ src/app/signup/[[...signup]]/page.tsx | 9 +++++++ src/components/Navbar.tsx | 31 +++++++++++++++++++++++++ src/middleware.ts | 9 +++++++ src/providers/index.tsx | 25 ++++++++++++++++++++ 9 files changed, 122 insertions(+), 4 deletions(-) create mode 100644 convex/auth.config.js create mode 100644 src/app/account/[[...account]]/page.tsx create mode 100644 src/app/login/[[...login]]/page.tsx create mode 100644 src/app/signup/[[...signup]]/page.tsx create mode 100644 src/components/Navbar.tsx create mode 100644 src/middleware.ts create mode 100644 src/providers/index.tsx diff --git a/.vscode/settings.json b/.vscode/settings.json index 5a586b3..8aad976 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "css.lint.unknownAtRules": "ignore" + "css.lint.unknownAtRules": "ignore", + "cSpell.words": ["nextjs", "signup"] } diff --git a/convex/auth.config.js b/convex/auth.config.js new file mode 100644 index 0000000..970257a --- /dev/null +++ b/convex/auth.config.js @@ -0,0 +1,10 @@ +const config = { + providers: [ + { + domain: process.env.CLERK_JWT_ISSUER_DOMAIN, + applicationID: 'convex', + }, + ], +}; + +export default config; diff --git a/src/app/account/[[...account]]/page.tsx b/src/app/account/[[...account]]/page.tsx new file mode 100644 index 0000000..b468c61 --- /dev/null +++ b/src/app/account/[[...account]]/page.tsx @@ -0,0 +1,9 @@ +import { UserProfile } from '@clerk/nextjs'; + +export default function AccountPage() { + return ( +
+ +
+ ); +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index bc65fb5..39a7902 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,3 +1,6 @@ +import Navbar from '@/components/Navbar'; +import ConvexProvider from '@/providers'; +import { ClerkProvider } from '@clerk/nextjs'; import type { Metadata } from 'next'; import { Inter } from 'next/font/google'; import './globals.css'; @@ -14,8 +17,20 @@ export default function RootLayout({ children: React.ReactNode; }) { return ( - - {children} - + + + + + +
{children}
+ + +
+
); } diff --git a/src/app/login/[[...login]]/page.tsx b/src/app/login/[[...login]]/page.tsx new file mode 100644 index 0000000..dad3ce0 --- /dev/null +++ b/src/app/login/[[...login]]/page.tsx @@ -0,0 +1,9 @@ +import { SignIn } from '@clerk/nextjs/app-beta'; + +export default function LoginPage() { + return ( +
+ +
+ ); +} diff --git a/src/app/signup/[[...signup]]/page.tsx b/src/app/signup/[[...signup]]/page.tsx new file mode 100644 index 0000000..5715451 --- /dev/null +++ b/src/app/signup/[[...signup]]/page.tsx @@ -0,0 +1,9 @@ +import { SignUp } from '@clerk/nextjs'; + +export default function SignUpPage() { + return ( +
+ +
+ ); +} diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx new file mode 100644 index 0000000..d82212f --- /dev/null +++ b/src/components/Navbar.tsx @@ -0,0 +1,31 @@ +import { SignedIn, SignedOut, UserButton } from '@clerk/nextjs'; +import Link from 'next/link'; + +export default function Navbar() { + return ( + + ); +} diff --git a/src/middleware.ts b/src/middleware.ts new file mode 100644 index 0000000..a29eb28 --- /dev/null +++ b/src/middleware.ts @@ -0,0 +1,9 @@ +import { authMiddleware } from '@clerk/nextjs'; + +export default authMiddleware({ + publicRoutes: [], +}); + +export const config = { + matcher: ['/((?!.*\\..*|_next).*)', '/', '/(api|trpc)(.*)'], +}; diff --git a/src/providers/index.tsx b/src/providers/index.tsx new file mode 100644 index 0000000..584a3f3 --- /dev/null +++ b/src/providers/index.tsx @@ -0,0 +1,25 @@ +'use client'; + +import { useAuth } from '@clerk/nextjs'; +import { ConvexReactClient } from 'convex/react'; +import { ConvexProviderWithClerk } from 'convex/react-clerk'; +import { ReactNode } from 'react'; + +const CONVEX_URL = process.env.NEXT_PUBLIC_CONVEX_URL; + +if (CONVEX_URL === undefined) { + throw Error('NEXT_PUBLIC_CONVEX_URL is undefined'); +} + +const client = new ConvexReactClient(CONVEX_URL); + +export default function ConvexProvider({ children }: { children: ReactNode }) { + return ( + + {children} + + ); +}