From 38a03ed7d8ac769ddec8294dd62a83ee07a8ab57 Mon Sep 17 00:00:00 2001 From: Ranjan Purbey Date: Mon, 10 Oct 2022 03:48:45 +0530 Subject: [PATCH] feat(providers): Add Pinterest Provider (#5485) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(providers): Add Pinterest Provider * Apply suggestions from code review * Update pinterest.ts * Update pinterest.ts * Apply suggestions from code review Co-authored-by: Balázs Orbán --- docs/docs/providers/pinterest.md | 37 +++++++++++++++++++ packages/next-auth/src/providers/pinterest.ts | 34 +++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 docs/docs/providers/pinterest.md create mode 100644 packages/next-auth/src/providers/pinterest.ts diff --git a/docs/docs/providers/pinterest.md b/docs/docs/providers/pinterest.md new file mode 100644 index 00000000..57318e72 --- /dev/null +++ b/docs/docs/providers/pinterest.md @@ -0,0 +1,37 @@ +--- +id: pinterest +title: Pinterest +--- + +## Documentation + +https://developers.pinterest.com/docs/getting-started/authentication/ + +## Configuration + +https://developers.pinterest.com/apps/ + +## Options + +The **Pinterest Provider** comes with a set of default options: + +- [Pinterest Provider options](https://github.com/nextauthjs/next-auth/blob/main/packages/next-auth/src/providers/pinterest.ts) + +You can override any of the options to suit your own use case. + +## Example + +```ts +import PinterestProvider from "next-auth/providers/pinterest" +... +providers: [ + PinterestProvider({ + clientId: process.env.PINTEREST_ID, + clientSecret: process.env.PINTEREST_SECRET + }) +] +... + +:::tip +To use in production, make sure the app has standard API access and not trial access +::: diff --git a/packages/next-auth/src/providers/pinterest.ts b/packages/next-auth/src/providers/pinterest.ts new file mode 100644 index 00000000..891dbd17 --- /dev/null +++ b/packages/next-auth/src/providers/pinterest.ts @@ -0,0 +1,34 @@ +import { OAuthConfig, OAuthUserConfig } from "." + +export interface PinterestProfile extends Record { + account_type: "BUSINESS" | "PINNER" + profile_image: string + website_url: string + username: string +} + +export default function PinterestProvider

( + options: OAuthUserConfig

+): OAuthConfig

{ + return { + id: "pinterest", + name: "Pinterest", + type: "oauth", + authorization: { + url: "https://www.pinterest.com/oauth", + params: { scope: "user_accounts:read" }, + }, + checks: ["state"], + token: "https://api.pinterest.com/v5/oauth/token", + userinfo: "https://api.pinterest.com/v5/user_account", + profile({ username, profile_image }) { + return { + id: username, + name: username, + image: profile_image, + email: null, + } + }, + options, + } +}