generated from nextauthjs/next-auth-example
-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 9e421e4
Showing
50 changed files
with
4,848 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
AUTH_SECRET= # `npx auth secret` or `openssl rand -hex 32` | ||
|
||
AUTH_AUTH0_ID= | ||
AUTH_AUTH0_SECRET= | ||
AUTH_AUTH0_ISSUER= | ||
|
||
AUTH_FACEBOOK_ID= | ||
AUTH_FACEBOOK_SECRET= | ||
|
||
AUTH_GITHUB_ID= | ||
AUTH_GITHUB_SECRET= | ||
|
||
AUTH_GOOGLE_ID= | ||
AUTH_GOOGLE_SECRET= | ||
|
||
AUTH_TWITTER_ID= | ||
AUTH_TWITTER_SECRET= | ||
|
||
# THIRD_PARTY_API_EXAMPLE_BACKEND= # Read more at https://authjs.dev/guides/integrating-third-party-backends | ||
|
||
# AUTH_TRUST_HOST=1 # Read more at https://authjs.dev/getting-started/deployment#auth_trust_host |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# https://docs.github.com/en/github/administering-a-repository/displaying-a-sponsor-button-in-your-repository | ||
|
||
open_collective: nextauth | ||
github: [balazsorban44, ThangHuuVu] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
.DS_Store | ||
|
||
node_modules/ | ||
logs | ||
*.log | ||
npm-debug.log* | ||
yarn-debug.log* | ||
yarn-error.log* | ||
lerna-debug.log* | ||
.yarn-integrity | ||
.npm | ||
|
||
.eslintcache | ||
|
||
*.tsbuildinfo | ||
next-env.d.ts | ||
|
||
.next | ||
.vercel | ||
.env*.local |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
# syntax=docker/dockerfile:1 | ||
FROM node:20-alpine AS base | ||
|
||
# Install dependencies only when needed | ||
FROM base AS deps | ||
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. | ||
RUN apk add --no-cache libc6-compat | ||
WORKDIR /app | ||
|
||
# Install dependencies | ||
COPY package.json pnpm-lock.yaml* ./ | ||
RUN corepack enable pnpm && pnpm i --frozen-lockfile | ||
|
||
# Rebuild the source code only when needed | ||
FROM base AS builder | ||
WORKDIR /app | ||
COPY --from=deps /app/node_modules ./node_modules | ||
COPY . . | ||
|
||
# Next.js collects completely anonymous telemetry data about general usage. | ||
# Learn more here: https://nextjs.org/telemetry | ||
# Uncomment the following line in case you want to disable telemetry during the build. | ||
# ENV NEXT_TELEMETRY_DISABLED 1 | ||
|
||
RUN corepack enable pnpm && pnpm build | ||
|
||
# Production image, copy all the files and run next | ||
FROM base AS runner | ||
WORKDIR /app | ||
|
||
ENV NODE_ENV production | ||
# Uncomment the following line in case you want to disable telemetry during runtime. | ||
# ENV NEXT_TELEMETRY_DISABLED 1 | ||
|
||
RUN addgroup --system --gid 1001 nodejs | ||
RUN adduser --system --uid 1001 nextjs | ||
|
||
COPY --from=builder /app/public ./public | ||
|
||
# Set the correct permission for prerender cache | ||
RUN mkdir .next | ||
RUN chown nextjs:nodejs .next | ||
|
||
# Automatically leverage output traces to reduce image size | ||
# https://nextjs.org/docs/advanced-features/output-file-tracing | ||
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ | ||
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static | ||
|
||
USER nextjs | ||
|
||
EXPOSE 3000 | ||
|
||
ENV PORT 3000 | ||
ENV HOSTNAME "0.0.0.0" | ||
|
||
# server.js is created by next build from the standalone output | ||
# https://nextjs.org/docs/pages/api-reference/next-config-js/output | ||
CMD ["node", "server.js"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
ISC License | ||
|
||
Copyright (c) 2022-2024, Balázs Orbán | ||
|
||
Permission to use, copy, modify, and/or distribute this software for any | ||
purpose with or without fee is hereby granted, provided that the above | ||
copyright notice and this permission notice appear in all copies. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
> The example repository is maintained from a [monorepo](https://github.com/nextauthjs/next-auth/tree/main/apps/examples/nextjs). Pull Requests should be opened against [`nextauthjs/next-auth`](https://github.com/nextauthjs/next-auth). | ||
<p align="center"> | ||
<br/> | ||
<a href="https://authjs.dev" target="_blank"><img width="150px" src="https://authjs.dev/img/logo-sm.png" /></a> | ||
<h3 align="center">NextAuth.js Example App</h3> | ||
<p align="center"> | ||
Open Source. Full Stack. Own Your Data. | ||
</p> | ||
<p align="center" style="align: center;"> | ||
<a href="https://npm.im/next-auth"> | ||
<img alt="npm" src="https://img.shields.io/npm/v/next-auth?color=green&label=next-auth"> | ||
</a> | ||
<a href="https://bundlephobia.com/result?p=next-auth-example"> | ||
<img src="https://img.shields.io/bundlephobia/minzip/next-auth?label=next-auth" alt="Bundle Size"/> | ||
</a> | ||
<a href="https://www.npmtrends.com/next-auth"> | ||
<img src="https://img.shields.io/npm/dm/next-auth?label=next-auth%20downloads" alt="Downloads" /> | ||
</a> | ||
<a href="https://npm.im/next-auth"> | ||
<img src="https://img.shields.io/badge/npm-TypeScript-blue" alt="TypeScript" /> | ||
</a> | ||
</p> | ||
</p> | ||
|
||
## Overview | ||
|
||
NextAuth.js is a complete open source authentication solution. | ||
|
||
This is an example application that shows how `next-auth` is applied to a basic Next.js app. | ||
|
||
The deployed version can be found at [`next-auth-example.vercel.app`](https://next-auth-example.vercel.app) | ||
|
||
### About NextAuth.js | ||
|
||
NextAuth.js is an easy to implement, full-stack (client/server) open source authentication library originally designed for [Next.js](https://nextjs.org) and [Serverless](https://vercel.com). Our goal is to [support even more frameworks](https://github.com/nextauthjs/next-auth/issues/2294) in the future. | ||
|
||
Go to [next-auth.js.org](https://authjs.dev) for more information and documentation. | ||
|
||
> _NextAuth.js is not officially associated with Vercel or Next.js._ | ||
## Getting Started | ||
|
||
### 1. Clone the repository and install dependencies | ||
|
||
``` | ||
git clone https://github.com/nextauthjs/next-auth-example.git | ||
cd next-auth-example | ||
pnpm install | ||
``` | ||
|
||
### 2. Configure your local environment | ||
|
||
Copy the .env.local.example file in this directory to .env.local (which will be ignored by Git): | ||
|
||
``` | ||
cp .env.local.example .env.local | ||
``` | ||
|
||
Add details for one or more providers (e.g. Google, Twitter, GitHub, Email, etc). | ||
|
||
#### Database | ||
|
||
A database is needed to persist user accounts and to support email sign in. However, you can still use NextAuth.js for authentication without a database by using OAuth for authentication. If you do not specify a database, [JSON Web Tokens](https://jwt.io/introduction) will be enabled by default. | ||
|
||
You **can** skip configuring a database and come back to it later if you want. | ||
|
||
For more information about setting up a database, please check out the following links: | ||
|
||
- Docs: [authjs.dev/reference/core/adapters](https://authjs.dev/reference/core/adapters) | ||
|
||
### 3. Configure Authentication Providers | ||
|
||
1. Review and update options in `auth.ts` as needed. | ||
|
||
2. When setting up OAuth, in the developer admin page for each of your OAuth services, you should configure the callback URL to use a callback path of `{server}/api/auth/callback/{provider}`. | ||
|
||
e.g. For Google OAuth you would use: `http://localhost:3000/api/auth/callback/google` | ||
|
||
A list of configured providers and their callback URLs is available from the endpoint `api/auth/providers`. You can find more information at https://authjs.dev/getting-started/providers/oauth-tutorial | ||
|
||
1. You can also choose to specify an SMTP server for passwordless sign in via email. | ||
|
||
### 4. Start the application | ||
|
||
To run your site locally, use: | ||
|
||
``` | ||
pnpm run dev | ||
``` | ||
|
||
To run it in production mode, use: | ||
|
||
``` | ||
pnpm run build | ||
pnpm run start | ||
``` | ||
|
||
### 5. Preparing for Production | ||
|
||
Follow the [Deployment documentation](https://authjs.dev/getting-started/deployment) | ||
|
||
## Acknowledgements | ||
|
||
<a href="https://vercel.com?utm_source=nextauthjs&utm_campaign=oss"> | ||
<img width="170px" src="https://raw.githubusercontent.com/nextauthjs/next-auth/main/docs/public/img/etc/powered-by-vercel.svg" alt="Powered By Vercel" /> | ||
</a> | ||
<p align="left">Thanks to Vercel sponsoring this project by allowing it to be deployed for free for the entire NextAuth.js Team</p> | ||
|
||
## License | ||
|
||
ISC |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
import { auth } from "@/auth" | ||
import { NextRequest } from "next/server" | ||
|
||
// Review if we need this, and why | ||
function stripContentEncoding(result: Response) { | ||
const responseHeaders = new Headers(result.headers) | ||
responseHeaders.delete("content-encoding") | ||
|
||
return new Response(result.body, { | ||
status: result.status, | ||
statusText: result.statusText, | ||
headers: responseHeaders, | ||
}) | ||
} | ||
|
||
async function handler(request: NextRequest) { | ||
const session = await auth() | ||
|
||
const headers = new Headers(request.headers) | ||
headers.set("Authorization", `Bearer ${session?.accessToken}`) | ||
|
||
let backendUrl = | ||
process.env.THIRD_PARTY_API_EXAMPLE_BACKEND ?? | ||
"https://authjs-third-party-backend.authjs.dev" | ||
|
||
let url = request.nextUrl.href.replace(request.nextUrl.origin, backendUrl) | ||
let result = await fetch(url, { headers, body: request.body }) | ||
|
||
return stripContentEncoding(result) | ||
} | ||
|
||
export const dynamic = "force-dynamic" | ||
|
||
export { handler as GET, handler as POST } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
"use client" | ||
import CustomLink from "@/components/custom-link" | ||
import { useEffect, useState } from "react" | ||
|
||
export default function Page() { | ||
const [data, setData] = useState() | ||
useEffect(() => { | ||
;(async () => { | ||
const res = await fetch("/api/protected") | ||
const json = await res.json() | ||
setData(json) | ||
})() | ||
}, []) | ||
return ( | ||
<div className="flex flex-col gap-6"> | ||
<h1 className="text-3xl font-bold">Route Handler Usage</h1> | ||
<p> | ||
This page fetches data from an API{" "} | ||
<CustomLink href="https://nextjs.org/docs/app/building-your-application/routing/route-handlers"> | ||
Route Handler | ||
</CustomLink> | ||
. The API is protected using the universal{" "} | ||
<CustomLink href="https://nextjs.authjs.dev#auth"> | ||
<code>auth()</code> | ||
</CustomLink>{" "} | ||
method. | ||
</p> | ||
<div className="flex flex-col rounded-md bg-gray-100"> | ||
<div className="rounded-t-md bg-gray-200 p-4 font-bold"> | ||
Data from API Route | ||
</div> | ||
<pre className="whitespace-pre-wrap break-all px-4 py-6"> | ||
{JSON.stringify(data, null, 2)} | ||
</pre> | ||
</div> | ||
</div> | ||
) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
import { handlers } from "auth" | ||
export const { GET, POST } = handlers |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
import { auth } from "auth" | ||
|
||
export const GET = auth((req) => { | ||
if (req.auth) { | ||
return Response.json({ data: "Protected data" }) | ||
} | ||
|
||
return Response.json({ message: "Not authenticated" }, { status: 401 }) | ||
}) as any // TODO: Fix `auth()` return type |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
import { handlers } from "auth" | ||
export const { GET, POST } = handlers |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
import { auth } from "auth" | ||
import ClientExample from "@/components/client-example" | ||
import { SessionProvider } from "next-auth/react" | ||
|
||
export default async function ClientPage() { | ||
const session = await auth() | ||
if (session?.user) { | ||
// TODO: Look into https://react.dev/reference/react/experimental_taintObjectReference | ||
// filter out sensitive data before passing to client. | ||
session.user = { | ||
name: session.user.name, | ||
email: session.user.email, | ||
image: session.user.image, | ||
} | ||
} | ||
|
||
return ( | ||
<SessionProvider basePath={"/auth"} session={session}> | ||
<ClientExample /> | ||
</SessionProvider> | ||
) | ||
} |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
@tailwind base; | ||
@tailwind components; | ||
@tailwind utilities; | ||
|
||
@layer base { | ||
:root { | ||
--background: 0 0% 100%; | ||
--foreground: 222.2 84% 4.9%; | ||
|
||
--card: 0 0% 100%; | ||
--card-foreground: 222.2 84% 4.9%; | ||
|
||
--popover: 0 0% 100%; | ||
--popover-foreground: 222.2 84% 4.9%; | ||
|
||
--primary: 222.2 47.4% 11.2%; | ||
--primary-foreground: 210 40% 98%; | ||
|
||
--secondary: 210 40% 96.1%; | ||
--secondary-foreground: 222.2 47.4% 11.2%; | ||
|
||
--muted: 210 40% 96.1%; | ||
--muted-foreground: 215.4 16.3% 46.9%; | ||
|
||
--accent: 210 40% 96.1%; | ||
--accent-foreground: 222.2 47.4% 11.2%; | ||
|
||
--destructive: 0 84.2% 60.2%; | ||
--destructive-foreground: 210 40% 98%; | ||
|
||
--border: 214.3 31.8% 91.4%; | ||
--input: 214.3 31.8% 91.4%; | ||
--ring: 222.2 84% 4.9%; | ||
|
||
--radius: 0.5rem; | ||
} | ||
} | ||
|
||
@layer base { | ||
* { | ||
@apply border-border; | ||
} | ||
|
||
body { | ||
@apply bg-background text-foreground; | ||
} | ||
} |
Oops, something went wrong.