diff --git a/.env.example b/.env.example index aa6952e..474c321 100644 --- a/.env.example +++ b/.env.example @@ -1,2 +1,9 @@ DATABASE_URL=postgresql://postgres:postgres@localhost:5432/postgres DATABASE_URL_NON_POOLING=postgresql://postgres:postgres@localhost:5432/postgres +EMAIL_SERVER=smtp://user:password@smtp.example.com +EMAIL_FROM=noreply@example.com +AUTH0_SECRET=somerandomstringtouseasasecret +AUTH0_BASE_URL=http://localhost:3000 +AUTH0_CLIENT_ID="" +AUTH0_CLIENT_SECRET="" +AUTH0_DOMAIN="" \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9e5a22b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "WillLuke.nextjs.addTypesOnSave": true, + "WillLuke.nextjs.hasPrompted": true +} diff --git a/app/api/auth/[auth0]/route.ts b/app/api/auth/[auth0]/route.ts new file mode 100644 index 0000000..1d2e4e4 --- /dev/null +++ b/app/api/auth/[auth0]/route.ts @@ -0,0 +1,3 @@ +import { handleAuth } from '@auth0/nextjs-auth0'; + +export const GET = handleAuth(); diff --git a/app/layout.tsx b/app/layout.tsx index ccb665b..700b166 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,3 +1,4 @@ +import { UserProvider } from '@auth0/nextjs-auth0/client'; import type { Metadata } from 'next'; import { Inter } from 'next/font/google'; import './globals.css'; @@ -16,7 +17,9 @@ export default function RootLayout({ }>) { return ( - {children} + + {children} + ); } diff --git a/app/login/page.tsx b/app/login/page.tsx new file mode 100644 index 0000000..29122e4 --- /dev/null +++ b/app/login/page.tsx @@ -0,0 +1,8 @@ +export default function SignIn() { + return ( +
+ Login + Logout +
+ ); +} diff --git a/app/user/page.tsx b/app/user/page.tsx new file mode 100644 index 0000000..a4e6172 --- /dev/null +++ b/app/user/page.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { useUser } from '@auth0/nextjs-auth0/client'; + +export default function ProfileClient() { + const { user, error, isLoading } = useUser(); + + if (isLoading) return
Loading...
; + if (error) return
{error.message}
; + + return ( + user && ( +
+

{user.email}

+
+ ) + ); +} diff --git a/package.json b/package.json index 550399e..0608e4f 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "prisma:reset": "npx prisma db push --force-reset" }, "dependencies": { + "@auth0/nextjs-auth0": "^3.5.0", "@prisma/client": "^5.6.0", "@vercel/analytics": "^1.1.1", "next": "^14.1.0", diff --git a/yarn.lock b/yarn.lock index 8c789c1..ce88bda 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,25 @@ __metadata: languageName: node linkType: hard +"@auth0/nextjs-auth0@npm:^3.5.0": + version: 3.5.0 + resolution: "@auth0/nextjs-auth0@npm:3.5.0" + dependencies: + "@panva/hkdf": "npm:^1.0.2" + cookie: "npm:^0.6.0" + debug: "npm:^4.3.4" + joi: "npm:^17.6.0" + jose: "npm:^4.9.2" + oauth4webapi: "npm:^2.3.0" + openid-client: "npm:^5.2.1" + tslib: "npm:^2.4.0" + url-join: "npm:^4.0.1" + peerDependencies: + next: ">=10" + checksum: fa3fec58d7fa402fb5a95ee0d109197bc10abe401453ebe98e6ba39eb2f5d84cb6b81d31178b454cd3a2abba5060f76c34279434c93dd71a2ba6483724db16a2 + languageName: node + linkType: hard + "@babel/code-frame@npm:^7.0.0": version: 7.24.7 resolution: "@babel/code-frame@npm:7.24.7" @@ -295,6 +314,22 @@ __metadata: languageName: node linkType: hard +"@hapi/hoek@npm:^9.0.0, @hapi/hoek@npm:^9.3.0": + version: 9.3.0 + resolution: "@hapi/hoek@npm:9.3.0" + checksum: ad83a223787749f3873bce42bd32a9a19673765bf3edece0a427e138859ff729469e68d5fdf9ff6bbee6fb0c8e21bab61415afa4584f527cfc40b59ea1957e70 + languageName: node + linkType: hard + +"@hapi/topo@npm:^5.1.0": + version: 5.1.0 + resolution: "@hapi/topo@npm:5.1.0" + dependencies: + "@hapi/hoek": "npm:^9.0.0" + checksum: 084bfa647015f4fd3fdd51fadb2747d09ef2f5e1443d6cbada2988b0c88494f85edf257ec606c790db146ac4e34ff57f3fcb22e3299b8e06ed5c87ba7583495c + languageName: node + linkType: hard + "@humanwhocodes/config-array@npm:^0.11.14": version: 0.11.14 resolution: "@humanwhocodes/config-array@npm:0.11.14" @@ -511,6 +546,13 @@ __metadata: languageName: node linkType: hard +"@panva/hkdf@npm:^1.0.2": + version: 1.2.0 + resolution: "@panva/hkdf@npm:1.2.0" + checksum: f3af9d2a7101a08ebf50fd23412dac13801ff6e3242a70dc93b3948fb176f99eb4f42f941a58b9c0cc3ccc3c89a2d692e7407ab22dda591bdbcb2b799be68e4b + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -606,6 +648,29 @@ __metadata: languageName: node linkType: hard +"@sideway/address@npm:^4.1.5": + version: 4.1.5 + resolution: "@sideway/address@npm:4.1.5" + dependencies: + "@hapi/hoek": "npm:^9.0.0" + checksum: c4c73ac0339504f34e016d3a687118e7ddf197c1c968579572123b67b230be84caa705f0f634efdfdde7f2e07a6e0224b3c70665dc420d8bc95bf400cfc4c998 + languageName: node + linkType: hard + +"@sideway/formula@npm:^3.0.1": + version: 3.0.1 + resolution: "@sideway/formula@npm:3.0.1" + checksum: 8d3ee7f80df4e5204b2cbe92a2a711ca89684965a5c9eb3b316b7051212d3522e332a65a0bb2a07cc708fcd1d0b27fcb30f43ff0bcd5089d7006c7160a89eefe + languageName: node + linkType: hard + +"@sideway/pinpoint@npm:^2.0.0": + version: 2.0.0 + resolution: "@sideway/pinpoint@npm:2.0.0" + checksum: 1ed21800128b2b23280ba4c9db26c8ff6142b97a8683f17639fd7f2128aa09046461574800b30fb407afc5b663c2331795ccf3b654d4b38fa096e41a5c786bf8 + languageName: node + linkType: hard + "@swc/counter@npm:^0.1.3": version: 0.1.3 resolution: "@swc/counter@npm:0.1.3" @@ -1566,6 +1631,13 @@ __metadata: languageName: node linkType: hard +"cookie@npm:^0.6.0": + version: 0.6.0 + resolution: "cookie@npm:0.6.0" + checksum: c1f8f2ea7d443b9331680598b0ae4e6af18a618c37606d1bbdc75bec8361cce09fe93e727059a673f2ba24467131a9fb5a4eec76bb1b149c1b3e1ccb268dc583 + languageName: node + linkType: hard + "cosmiconfig-typescript-loader@npm:^5.0.0": version: 5.0.0 resolution: "cosmiconfig-typescript-loader@npm:5.0.0" @@ -3503,6 +3575,26 @@ __metadata: languageName: node linkType: hard +"joi@npm:^17.6.0": + version: 17.13.3 + resolution: "joi@npm:17.13.3" + dependencies: + "@hapi/hoek": "npm:^9.3.0" + "@hapi/topo": "npm:^5.1.0" + "@sideway/address": "npm:^4.1.5" + "@sideway/formula": "npm:^3.0.1" + "@sideway/pinpoint": "npm:^2.0.0" + checksum: 4c150db0c820c3a52f4a55c82c1fc5e144a5b5f4da9ffebc7339a15469d1a447ebb427ced446efcb9709ab56bd71a06c4c67c9381bc1b9f9ae63fc7c89209bdf + languageName: node + linkType: hard + +"jose@npm:^4.15.5, jose@npm:^4.9.2": + version: 4.15.7 + resolution: "jose@npm:4.15.7" + checksum: 7453aad039da7f0174352d4be416a8688c3cd339b332d23af84fbce1b8b907387dd70aaa02ebbadbc59cdb66efdc30f3b5a0c067da137324ac655db227ac90f3 + languageName: node + linkType: hard + "js-beautify@npm:^1.14.11": version: 1.15.1 resolution: "js-beautify@npm:1.15.1" @@ -4315,6 +4407,13 @@ __metadata: languageName: node linkType: hard +"oauth4webapi@npm:^2.3.0": + version: 2.11.1 + resolution: "oauth4webapi@npm:2.11.1" + checksum: 94a3f9dfff0399aff4d9e5e006f813063bcb71211bd07cac119afa5a69d7b5426fe2a19ccb7643e2a2dd1f9512c50e3f2b875275f943877da2dea2112c23e83e + languageName: node + linkType: hard + "object-assign@npm:^4.0.1, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" @@ -4322,6 +4421,13 @@ __metadata: languageName: node linkType: hard +"object-hash@npm:^2.2.0": + version: 2.2.0 + resolution: "object-hash@npm:2.2.0" + checksum: dee06b6271bf5769ae5f1a7386fdd52c1f18aae9fcb0b8d4bb1232f2d743d06cb5b662be42378b60a1c11829f96f3f86834a16bbaa57a085763295fff8b93e27 + languageName: node + linkType: hard + "object-hash@npm:^3.0.0": version: 3.0.0 resolution: "object-hash@npm:3.0.0" @@ -4421,6 +4527,13 @@ __metadata: languageName: node linkType: hard +"oidc-token-hash@npm:^5.0.3": + version: 5.0.3 + resolution: "oidc-token-hash@npm:5.0.3" + checksum: 35fa19aea9ff2c509029ec569d74b778c8a215b92bd5e6e9bc4ebbd7ab035f44304ff02430a6397c3fb7c1d15ebfa467807ca0bcd31d06ba610b47798287d303 + languageName: node + linkType: hard + "once@npm:^1.3.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -4448,6 +4561,18 @@ __metadata: languageName: node linkType: hard +"openid-client@npm:^5.2.1": + version: 5.6.5 + resolution: "openid-client@npm:5.6.5" + dependencies: + jose: "npm:^4.15.5" + lru-cache: "npm:^6.0.0" + object-hash: "npm:^2.2.0" + oidc-token-hash: "npm:^5.0.3" + checksum: e843f39b3eac07d9a415d8524745d722df0298708e58ac4e13b2642a34b2211591d2c9a58d6f4e29826b678856965454bcfa5148a030c7eef53178ceff48d8ee + languageName: node + linkType: hard + "optionator@npm:^0.9.3": version: 0.9.4 resolution: "optionator@npm:0.9.4" @@ -6085,6 +6210,13 @@ __metadata: languageName: node linkType: hard +"url-join@npm:^4.0.1": + version: 4.0.1 + resolution: "url-join@npm:4.0.1" + checksum: b53b256a9a36ed6b0f6768101e78ca97f32d7b935283fd29ce19d0bbfb6f88aa80aa6c03fd87f2f8978ab463a6539f597a63051e7086f3379685319a7495f709 + languageName: node + linkType: hard + "util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" @@ -6106,6 +6238,7 @@ __metadata: version: 0.0.0-use.local resolution: "water-utility-portal@workspace:." dependencies: + "@auth0/nextjs-auth0": "npm:^3.5.0" "@commitlint/cli": "npm:^18.4.3" "@commitlint/config-conventional": "npm:^18.4.3" "@prisma/client": "npm:^5.6.0"