thgh

payload plugin oauth

by thgh
Authentication & SSO
v2
^2
MIT

Overview

Summary generated from the README

Adds OAuth sign-in to a Payload CMS site by configuring passport-oauth2 and mounting authorize and callback routes. It also adds a sign-in button to the login page. Multiple providers can be added by registering the plugin several times with unique paths. Version 2 targets Payload v2 with the MongoDB adapter.

Features

  • Configures passport-oauth2 with client ID, secret, authorization and token URLs
  • Mounts authorize and callback routes
  • Adds a sign-in button with a custom label to the login page
  • Custom userinfo function to map the provider profile to a user
  • Supports multiple OAuth providers through separate plugin instances with unique paths

Use cases

  • Let admin users sign in through an existing OAuth identity provider
  • Offer several OAuth providers side by side on the Payload login page

From the author

Add oAuth sign in to your Payload CMS site

Installation

npm i payload-plugin-oauth

112

Stars

15

Forks

12

Open Issues

5 months ago

Last Updated

0

Weekly Downloads

v2.2.1

npm Version

23.7 KB

Unpacked Size

5

Dependencies

GitHub stars

Trends appear after 7 days of data. Daily snapshots have not started yet.

npm weekly downloads

Trends appear after 7 days of data. Daily snapshots have not started yet.

Each point is npm's rolling 7-day download count.

Health Score

49/100Fair

Composite score based on GitHub activity, stars, npm downloads, publish recency, dependency count, and package size.

Badge for your README

Payload Directory health badge
Markdown
[![Payload Directory](https://payloaddirectory.dev/badge/562098618-root.svg)](https://payloaddirectory.dev/plugins/562098618-root)
HTML
<a href="https://payloaddirectory.dev/plugins/562098618-root"><img src="https://payloaddirectory.dev/badge/562098618-root.svg" alt="Payload Directory"></a>
Updated May 21, 2026Created Nov 5, 2022Published May 21, 2026

README

oAuth plugin for Payload CMS

Software License Issues NPM

Features

  • Configures passport-oauth2
  • Mounts authorize & callback route
  • Adds sign in button on login page

Installation

Payload v2

npm install payload-plugin-oauth@^2
# or
yarn add payload-plugin-oauth@^2

Payload v1

npm install payload-plugin-oauth@^1
# or
yarn add payload-plugin-oauth@^1

Usage

// payload.config.ts
import path from 'path'

import { webpackBundler } from '@payloadcms/bundler-webpack'
import { mongooseAdapter } from '@payloadcms/db-mongodb'
import { slateEditor } from '@payloadcms/richtext-slate'
import axios from 'axios'
import { oAuthPlugin } from 'payload-plugin-oauth'
import { buildConfig } from 'payload/config'
import Users from './collections/Users'

export default buildConfig({
  admin: {
    user: Users.slug,
    bundler: webpackBundler(),
  },
  editor: slateEditor({}),
  collections: [Users],
  typescript: {
    outputFile: path.resolve(__dirname, 'payload-types.ts'),
  },
  graphQL: {
    schemaOutputFile: path.resolve(__dirname, 'generated-schema.graphql'),
  },
  plugins: [
    payloadCloud(),
    oAuthPlugin({
      buttonLabel: 'Sign in with oAuth',
      databaseUri: process.env.DATABASE_URI,
      clientID: process.env.OAUTH_CLIENT_ID,
      clientSecret: process.env.OAUTH_CLIENT_SECRET,
      authorizationURL: process.env.OAUTH_AUTH_ENDPOINT,
      tokenURL: process.env.OAUTH_TOKEN_ENDPOINT,
      authorizePath: '/oauth/authorize1',
      callbackURL: process.env.ORIGIN + '/oauth/callback1',
      async userinfo(accessToken) {
        const { data: user } = await axios.get(
          process.env.OAUTH_USERINFO_ENDPOINT,
          { headers: { Authorization: `Bearer ${accessToken}` } }
        )
        return {
          sub: user.ID,
          username: user.preferred_username,
        }
      },
    }),
    // Another oAuth provider
    oAuthPlugin({
      buttonLabel: 'Sign in with Alternative',
      // These paths must be unique per provider
      authorizePath: '/oauth/authorize2',
      callbackURL: process.env.ORIGIN + '/oauth/callback2',

      ...rest,
    }),
  ],
  db: mongooseAdapter({
    url: process.env.DATABASE_URI,
  }),
})

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Contributions and feedback are very welcome.

To get it running:

  1. Clone the project.
  2. npm install
  3. npm run build

Publishing process

  1. Run npm run fix
  2. Run npm version minor
  3. Push to Github and let CI publish to NPM

Credits

License

The MIT License (MIT). Please see License File for more information.

Similar plugins