From 19fd182395cec88e92dd394d5305de9927a97b31 Mon Sep 17 00:00:00 2001 From: wangsijie Date: Thu, 16 May 2024 11:27:34 +0800 Subject: [PATCH] feat: next auth guide --- .../assets/next-auth-redirect-uri.png | Bin 0 -> 34938 bytes .../framework/next-auth/README.mdx | 43 ++++++++++++ .../framework/next-auth/_config-provider.mdx | 63 ++++++++++++++++++ .../framework/next-auth/_guide-tip.mdx | 5 ++ .../next-auth/_scopes-and-claims-code.md | 13 ++++ .../next-auth/_scopes-and-claims.mdx | 5 ++ static/img/logo/next-auth.svg | 25 +++++++ 7 files changed, 154 insertions(+) create mode 100644 docs/quick-starts/assets/next-auth-redirect-uri.png create mode 100644 docs/quick-starts/framework/next-auth/README.mdx create mode 100644 docs/quick-starts/framework/next-auth/_config-provider.mdx create mode 100644 docs/quick-starts/framework/next-auth/_guide-tip.mdx create mode 100644 docs/quick-starts/framework/next-auth/_scopes-and-claims-code.md create mode 100644 docs/quick-starts/framework/next-auth/_scopes-and-claims.mdx create mode 100644 static/img/logo/next-auth.svg diff --git a/docs/quick-starts/assets/next-auth-redirect-uri.png b/docs/quick-starts/assets/next-auth-redirect-uri.png new file mode 100644 index 0000000000000000000000000000000000000000..a7cac8fd8a0816a092198c7a6674556be31a02f5 GIT binary patch literal 34938 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 literal 0 HcmV?d00001 diff --git a/docs/quick-starts/framework/next-auth/README.mdx b/docs/quick-starts/framework/next-auth/README.mdx new file mode 100644 index 00000000000..e1763c74008 --- /dev/null +++ b/docs/quick-starts/framework/next-auth/README.mdx @@ -0,0 +1,43 @@ +--- +slug: /quick-starts/next-auth +sidebar_label: Next Auth +sidebar_custom_props: + logoFilename: 'next-auth.svg' + description: Authentication for Next.js. +--- + +import FurtherReadings from '../../fragments/_further-readings.md'; + +import ConfigProvider from './_config-provider.mdx'; +import GuideTip from './_guide-tip.mdx'; +import ScopesAndClaims from './_scopes-and-claims.mdx'; + +# Next Auth guide + +This guide will show you how to integrate Logto into your Next.js application with [Next Auth](https://next-auth.js.org/). + + + +## Prerequisites + +- A [Logto Cloud](https://cloud.logto.io) account or a self-hosted Logto (Check out the [⚡ Get started](../../../docs/tutorials/get-started/) guide to create one if you don't have). +- A Logto traditional application created. +- A Next.js project with Next Auth, check out the [Next Auth documentation](https://next-auth.js.org/getting-started/introduction). + +## Integration + +### Config Next Auth provider + + + +### Checkpoint + +Now, you can test your application to see if the authentication works as expected. + +## Scopes and claims + + + +## Further readings + + diff --git a/docs/quick-starts/framework/next-auth/_config-provider.mdx b/docs/quick-starts/framework/next-auth/_config-provider.mdx new file mode 100644 index 00000000000..78aa89a7efe --- /dev/null +++ b/docs/quick-starts/framework/next-auth/_config-provider.mdx @@ -0,0 +1,63 @@ +import redirectUriFigure from '../../assets/next-auth-redirect-uri.png'; +import ConfigureRedirectUri from '../../fragments/_configure-redirect-uri.mdx'; +import GetAppSecret from '../../fragments/_get-app-secret.mdx'; +import AssumingUrl from '../../fragments/_web-assuming-url.md'; +import SignInFlowSummary from '../../fragments/_web-sign-in-flow-summary.mdx'; + + + + + +#### Configure sign-in redirect URI + + + +#### Config Next Auth provider + + + +Modify your API route config of Next Auth, if you are using Pages Router, the file is in `pages/api/auth/[...nextauth].js`, if you are using App Router, the file is in `app/api/auth/[...nextauth]/router.ts`. + +The following is an example of App Router: + +```ts +import NextAuth from 'next-auth'; + +const handler = NextAuth({ + providers: [ + { + id: 'logto', + name: 'Logto', + type: 'oauth', + // You can get the well-known URL from the Logto Application Details page, + // in the field "OpenID Provider configuration endpoint" + wellKnown: 'https://xxxx.logto.app/oidc/.well-known/openid-configuration', + authorization: { params: { scope: 'openid offline_access profile email' } }, + clientId: '', + clientSecret: '', + client: { + id_token_signed_response_alg: 'ES384', + }, + profile(profile) { + // You can customize the user profile mapping here + return { + id: profile.sub, + name: profile.name ?? profile.username, + email: profile.email, + image: profile.picture, + }; + }, + }, + ], +}); + +export { handler as GET, handler as POST }; +``` + +1. Replace the `wellKnown` URL with your Logto application's "OpenID Provider configuration endpoint". +2. Replace the `clientId` and `clientSecret` with your Logto application's ID and secret. +3. Customize the `profile` function to map the user profile to the Next Auth user object, the default mapping is shown in the example. +4. Remember to set the `id_token_signed_response_alg` to `ES384`. diff --git a/docs/quick-starts/framework/next-auth/_guide-tip.mdx b/docs/quick-starts/framework/next-auth/_guide-tip.mdx new file mode 100644 index 00000000000..e045494c941 --- /dev/null +++ b/docs/quick-starts/framework/next-auth/_guide-tip.mdx @@ -0,0 +1,5 @@ +:::tip + +- In this guide, we assume you have set up Next Auth in your Next.js project. If you haven't, check out the [Next Auth documentation](https://next-auth.js.org/getting-started/introduction) to get started. + +::: diff --git a/docs/quick-starts/framework/next-auth/_scopes-and-claims-code.md b/docs/quick-starts/framework/next-auth/_scopes-and-claims-code.md new file mode 100644 index 00000000000..ddf7ae41225 --- /dev/null +++ b/docs/quick-starts/framework/next-auth/_scopes-and-claims-code.md @@ -0,0 +1,13 @@ +```ts +const handler = NextAuth({ + providers: [ + { + id: 'logto', + name: 'Logto', + // ... other options + authorization: { params: { scope: 'openid offline_access profile email' } }, + // ... other options + }, + ], +}); +``` diff --git a/docs/quick-starts/framework/next-auth/_scopes-and-claims.mdx b/docs/quick-starts/framework/next-auth/_scopes-and-claims.mdx new file mode 100644 index 00000000000..7c4ba9d1799 --- /dev/null +++ b/docs/quick-starts/framework/next-auth/_scopes-and-claims.mdx @@ -0,0 +1,5 @@ +import ScopesAndClaims from '../../fragments/_scopes-and-claims.mdx'; + +import ScopesAndClaimsCode from './_scopes-and-claims-code.md'; + +} /> diff --git a/static/img/logo/next-auth.svg b/static/img/logo/next-auth.svg new file mode 100644 index 00000000000..47b9c27d79a --- /dev/null +++ b/static/img/logo/next-auth.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + +