From 5bee6c13ba63ecd5efd66294a4df17387c760372 Mon Sep 17 00:00:00 2001
From: GHOSCHT <31184695+GHOSCHT@users.noreply.github.com>
Date: Sun, 19 May 2024 00:00:55 +0200
Subject: [PATCH] Init AuthJS
---
auth.ts | 32 ++++++
middleware.ts | 1 +
package.json | 11 +-
pnpm-lock.yaml | 85 +++++++++++++++
src/app/api/auth/[...nextauth]/route.ts | 2 +
src/app/globals.css | 33 ------
src/app/layout.tsx | 2 +-
src/app/page.tsx | 131 ++++--------------------
tsconfig.json | 3 +-
9 files changed, 151 insertions(+), 149 deletions(-)
create mode 100644 auth.ts
create mode 100644 middleware.ts
create mode 100644 src/app/api/auth/[...nextauth]/route.ts
diff --git a/auth.ts b/auth.ts
new file mode 100644
index 0000000..cc4a791
--- /dev/null
+++ b/auth.ts
@@ -0,0 +1,32 @@
+import NextAuth,{ type DefaultSession } from "next-auth";
+import Authentik from "next-auth/providers/authentik";
+
+declare module "next-auth" {
+ interface Session {
+ access_token: string;
+ }
+}
+
+export const { handlers, auth, signIn, signOut } = NextAuth({
+ providers: [Authentik({
+ clientId: process.env.AUTH_OIDC_CLIENT_ID,
+ clientSecret: process.env.AUTH_OIDC_CLIENT_SECRET,
+ issuer: process.env.AUTH_OIDC_ISSUER,
+ authorization: { params: { scope: 'openid profile email' } },
+ })],
+ callbacks: {
+ async jwt({token, account}) {
+ if (account) {
+ token = Object.assign({}, token, { access_token: account.access_token });
+ }
+ return token
+ },
+ async session({session, token}) {
+ if(session) {
+ session = Object.assign({}, session, {access_token: token.access_token})
+ console.log(session);
+ }
+ return session
+ }
+ }
+});
diff --git a/middleware.ts b/middleware.ts
new file mode 100644
index 0000000..9f6a417
--- /dev/null
+++ b/middleware.ts
@@ -0,0 +1 @@
+export { auth as middleware } from "auth"
diff --git a/package.json b/package.json
index 60bdd3e..da577b4 100644
--- a/package.json
+++ b/package.json
@@ -9,18 +9,19 @@
"lint": "next lint"
},
"dependencies": {
+ "next": "14.2.3",
+ "next-auth": "5.0.0-beta.18",
"react": "^18",
- "react-dom": "^18",
- "next": "14.2.3"
+ "react-dom": "^18"
},
"devDependencies": {
- "typescript": "^5",
"@types/node": "^20",
"@types/react": "^18",
"@types/react-dom": "^18",
+ "eslint": "^8",
+ "eslint-config-next": "14.2.3",
"postcss": "^8",
"tailwindcss": "^3.4.1",
- "eslint": "^8",
- "eslint-config-next": "14.2.3"
+ "typescript": "^5"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 39d320c..691a518 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,6 +8,9 @@ dependencies:
next:
specifier: 14.2.3
version: 14.2.3(react-dom@18.3.1)(react@18.3.1)
+ next-auth:
+ specifier: 5.0.0-beta.18
+ version: 5.0.0-beta.18(next@14.2.3)(react@18.3.1)
react:
specifier: ^18
version: 18.3.1
@@ -48,6 +51,29 @@ packages:
engines: {node: '>=10'}
dev: true
+ /@auth/core@0.31.0:
+ resolution: {integrity: sha512-UKk3psvA1cRbk4/c9CkpWB8mdWrkKvzw0DmEYRsWolUQytQ2cRqx+hYuV6ZCsngw/xbj9hpmkZmAZEyq2g4fMg==}
+ peerDependencies:
+ '@simplewebauthn/browser': ^9.0.1
+ '@simplewebauthn/server': ^9.0.2
+ nodemailer: ^6.8.0
+ peerDependenciesMeta:
+ '@simplewebauthn/browser':
+ optional: true
+ '@simplewebauthn/server':
+ optional: true
+ nodemailer:
+ optional: true
+ dependencies:
+ '@panva/hkdf': 1.1.1
+ '@types/cookie': 0.6.0
+ cookie: 0.6.0
+ jose: 5.3.0
+ oauth4webapi: 2.10.4
+ preact: 10.11.3
+ preact-render-to-string: 5.2.3(preact@10.11.3)
+ dev: false
+
/@babel/runtime@7.24.5:
resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==}
engines: {node: '>=6.9.0'}
@@ -266,6 +292,10 @@ packages:
fastq: 1.17.1
dev: true
+ /@panva/hkdf@1.1.1:
+ resolution: {integrity: sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==}
+ dev: false
+
/@pkgjs/parseargs@0.11.0:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@@ -288,6 +318,10 @@ packages:
tslib: 2.6.2
dev: false
+ /@types/cookie@0.6.0:
+ resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
+ dev: false
+
/@types/json5@0.0.29:
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
dev: true
@@ -686,6 +720,11 @@ packages:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: true
+ /cookie@0.6.0:
+ resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
+ engines: {node: '>= 0.6'}
+ dev: false
+
/cross-spawn@7.0.3:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
engines: {node: '>= 8'}
@@ -1742,6 +1781,10 @@ packages:
hasBin: true
dev: true
+ /jose@5.3.0:
+ resolution: {integrity: sha512-IChe9AtAE79ru084ow8jzkN2lNrG3Ntfiv65Cvj9uOCE2m5LNsdHG+9EbxWxAoWRF9TgDOqLN5jm08++owDVRg==}
+ dev: false
+
/js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -1909,6 +1952,27 @@ packages:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
dev: true
+ /next-auth@5.0.0-beta.18(next@14.2.3)(react@18.3.1):
+ resolution: {integrity: sha512-x55L8wZb8PcPGCYA3e/l9tdpd7YL3FDuhas4W8pxq3PjrWJ9OoDxNN0otK9axJamJBbBgjfzTJjVQB6hXoe0ZQ==}
+ peerDependencies:
+ '@simplewebauthn/browser': ^9.0.1
+ '@simplewebauthn/server': ^9.0.2
+ next: ^14
+ nodemailer: ^6.6.5
+ react: ^18.2.0
+ peerDependenciesMeta:
+ '@simplewebauthn/browser':
+ optional: true
+ '@simplewebauthn/server':
+ optional: true
+ nodemailer:
+ optional: true
+ dependencies:
+ '@auth/core': 0.31.0
+ next: 14.2.3(react-dom@18.3.1)(react@18.3.1)
+ react: 18.3.1
+ dev: false
+
/next@14.2.3(react-dom@18.3.1)(react@18.3.1):
resolution: {integrity: sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==}
engines: {node: '>=18.17.0'}
@@ -1956,6 +2020,10 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /oauth4webapi@2.10.4:
+ resolution: {integrity: sha512-DSoj8QoChzOCQlJkRmYxAJCIpnXFW32R0Uq7avyghIeB6iJq0XAblOD7pcq3mx4WEBDwMuKr0Y1qveCBleG2Xw==}
+ dev: false
+
/object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
@@ -2204,11 +2272,28 @@ packages:
source-map-js: 1.2.0
dev: true
+ /preact-render-to-string@5.2.3(preact@10.11.3):
+ resolution: {integrity: sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==}
+ peerDependencies:
+ preact: '>=10'
+ dependencies:
+ preact: 10.11.3
+ pretty-format: 3.8.0
+ dev: false
+
+ /preact@10.11.3:
+ resolution: {integrity: sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==}
+ dev: false
+
/prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
dev: true
+ /pretty-format@3.8.0:
+ resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==}
+ dev: false
+
/prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
dependencies:
diff --git a/src/app/api/auth/[...nextauth]/route.ts b/src/app/api/auth/[...nextauth]/route.ts
new file mode 100644
index 0000000..b07b3b0
--- /dev/null
+++ b/src/app/api/auth/[...nextauth]/route.ts
@@ -0,0 +1,2 @@
+import { handlers } from "auth" // Referring to the auth.ts we just created
+export const { GET, POST } = handlers
diff --git a/src/app/globals.css b/src/app/globals.css
index 875c01e..e69de29 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -1,33 +0,0 @@
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
-
-:root {
- --foreground-rgb: 0, 0, 0;
- --background-start-rgb: 214, 219, 220;
- --background-end-rgb: 255, 255, 255;
-}
-
-@media (prefers-color-scheme: dark) {
- :root {
- --foreground-rgb: 255, 255, 255;
- --background-start-rgb: 0, 0, 0;
- --background-end-rgb: 0, 0, 0;
- }
-}
-
-body {
- color: rgb(var(--foreground-rgb));
- background: linear-gradient(
- to bottom,
- transparent,
- rgb(var(--background-end-rgb))
- )
- rgb(var(--background-start-rgb));
-}
-
-@layer utilities {
- .text-balance {
- text-wrap: balance;
- }
-}
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 3314e47..978afd7 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -5,7 +5,7 @@ import "./globals.css";
const inter = Inter({ subsets: ["latin"] });
export const metadata: Metadata = {
- title: "Create Next App",
+ title: "Schnabu",
description: "Generated by create next app",
};
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 2acfd44..cfb8e59 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,113 +1,26 @@
-import Image from "next/image";
+import { signIn,signOut, auth } from "auth"
-export default function Home() {
+export default async function Home() {
+let session = await auth();
return (
-
-
-
- Get started by editing
- src/app/page.tsx
-
-
-
-
-
-
-
-
-
-
+ <>
+
Hello {session?.user?.name}!
+
+
+ >
);
}
diff --git a/tsconfig.json b/tsconfig.json
index 7b28589..5b305d1 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -18,7 +18,8 @@
}
],
"paths": {
- "@/*": ["./src/*"]
+ "@/*": ["./src/*"],
+ "auth": ["./auth"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],