All Projects → OpenSaasAU → keystone-nextjs-auth

OpenSaasAU / keystone-nextjs-auth

Licence: MIT license
A package that add social auth to Keystone-6 (https://keystonejs.com/) by using next-authjs (https://next-auth.js.org/)

Programming Languages

typescript
32286 projects
javascript
184084 projects - #8 most used programming language
Smarty
1635 projects
CSS
56736 projects
Dockerfile
14818 projects
EJS
674 projects

Projects that are alternatives of or similar to keystone-nextjs-auth

keystone-email
⚠️ Archived - Legacy email helper for KeystoneJS Apps
Stars: ✭ 30 (-50%)
Mutual labels:  keystone
movie-app
App using auth0, netlify functions, + Algolia
Stars: ✭ 39 (-35%)
Mutual labels:  auth0
coderplex-org
Official Website for Coderplex Community. Built with Next.js and deployed on Vercel.
Stars: ✭ 32 (-46.67%)
Mutual labels:  nextauth
auth0-aspnet-owin-webapi-samples
Auth0 Integration Samples for ASP.NET OWIN Web API Services
Stars: ✭ 25 (-58.33%)
Mutual labels:  auth0
PEDetour
modify binary Portable Executable to hook its export functions
Stars: ✭ 59 (-1.67%)
Mutual labels:  keystone
auth0-aspnetcore-mvc-samples
Auth0 Integration Samples for ASP.NET Core MVC Web Applications
Stars: ✭ 120 (+100%)
Mutual labels:  auth0
ARMStrong
A fast and simple ARM Simulator made for education based upon Unicorn and Keystone engines
Stars: ✭ 99 (+65%)
Mutual labels:  keystone
akka-jwt
Library for jwt authentication with akka
Stars: ✭ 16 (-73.33%)
Mutual labels:  auth0
Perspec
Scriptable desktop app to correct the perspective of images
Stars: ✭ 523 (+771.67%)
Mutual labels:  keystone
dokugaku-engineer
独学エンジニア
Stars: ✭ 184 (+206.67%)
Mutual labels:  auth0
fullstack-nextjs-ecommerce
Fullstack Next.js E-Commerce made with NextAuth + Prisma, Docker + TypeScript + React Query + Stripe + Tailwind Sentry and much more 🛒
Stars: ✭ 524 (+773.33%)
Mutual labels:  nextauth
rx react native starter kit
React Native/redux/observable/auth starter kit which include immutable, rxjs, auth0 integration
Stars: ✭ 20 (-66.67%)
Mutual labels:  auth0
cypress-nextjs-auth0
Cypress commands to support Auth0 and Next.js
Stars: ✭ 56 (-6.67%)
Mutual labels:  auth0
terraform-provider-auth0
Please see https://github.com/alexkappa/terraform-provider-auth0
Stars: ✭ 28 (-53.33%)
Mutual labels:  auth0
graphql-sample-apps
This repository contains sample GraphQL applications powered by Dgraph.
Stars: ✭ 65 (+8.33%)
Mutual labels:  auth0
buttons
🌱 buttons is a web service to help you keep doing things everyday
Stars: ✭ 21 (-65%)
Mutual labels:  auth0
drf-angular-docker-tutorial
Dockerized Django Back-end API using DRF with Angular Front-end Tutorial
Stars: ✭ 53 (-11.67%)
Mutual labels:  auth0
authing.js
🖥 Authing SDK for JavaScript and Node.js
Stars: ✭ 540 (+800%)
Mutual labels:  auth0
auth0-vue
A simple Vue.js Demo Application that uses Auth0 for Authentication
Stars: ✭ 39 (-35%)
Mutual labels:  auth0
Kuberam
Kuberam is built on jetpack compose + Auth0 during Hashnode Hackathon.
Stars: ✭ 33 (-45%)
Mutual labels:  auth0

Open in Visual Studio Code Release

Keystone next auth

This package enables the addition of social auth to keystone-6.

Contents

About

This uses NextAuth.js (https://next-auth.js.org/) project to add social auth to Keystone-6 (https://keystonejs.com/). Primary testing has been done with Auth0, happy for others to test other providers/give feedback or send through a PR.

Adding to your project

Add package by yarn add @opensaas/keystone-nextjs-auth then add the following to your keystone.ts:

Add import...

import { createAuth } from '@opensaas/keystone-nextjs-auth';
import Auth0 from '@opensaas/keystone-nextjs-auth/providers/auth0';

Add you Auth configuration including providers for Provider configuration see https://next-auth.js.org/providers/. For Provider configuration replace next-auth/providers/ with @opensaas/keystone-nextjs-auth/providers/

let sessionSecret = process.env.SESSION_SECRET;

if (!sessionSecret) {
  if (process.env.NODE_ENV === 'production') {
    throw new Error(
      'The SESSION_SECRET environment variable must be set in production'
    );
  } else {
    sessionSecret = '-- DEV COOKIE SECRET; CHANGE ME --';
  }
}

const auth = createAuth({
  listKey: 'User',
  identityField: 'subjectId',
  sessionData: `id name email`,
  autoCreate: true,
  resolver: async ({user, profile, account}) => {
    const username = user.name as string;
    const email = user.email as string;
    return { email, username };
  },
  keystonePath: '/admin',
  sessionSecret,
  providers: [
    Auth0({
      clientId: process.env.AUTH0_CLIENT_ID || 'Auth0ClientID',
      clientSecret: process.env.AUTH0_CLIENT_SECRET || 'Auth0ClientSecret',
      domain: process.env.AUTH0_DOMAIN || 'opensaas.au.auth0.com',
    }),
]
});

Wrap your keystone config in auth.withAuth. Note that generateNodeAPI is required.

export default auth.withAuth(
  config({
    server: {},
    db: {},
    ui: {},
    lists,
    experimental: {
      generateNodeAPI: true,
    },
    ...
  });

Configuration

Provider configuration see https://next-auth.js.org/configuration/providers. For Keystone-6 Configuration see https://keystonejs.com/ for example see the example backend

  • listKey - the list for authentication (generally 'User'). Make sure any required fields are set using the *Map fields, see note below.
  • identityField - The field that stores the identity/subjectId in keystone (generally 'subjectId'). You will need to add this field to your list schema specified by listKey. An example can be found here.
  • sessionData - Data to be stored in the session ( something like 'id name email'),
  • autoCreate - boolean to autocreate a user when they log in
  • userMap: key:value pairs that define what is copied from the User object returned from NextAuth in the SignIn callback (https://next-auth.js.org/configuration/callbacks#sign-in-callback) Left side is Keystone side, right is what comes from NextAuth eg: { subjectId: 'id', name: 'name' }
  • accountMap - As Above but for the Account object
  • profileMap - As Above but for the Profile object
  • keystonePath - the path you want to access keystone from your frontend app (if required).

Note: The Keystone create-keystone-app CLI app (generally run with yarn create keystone-app/npm init keystone-app) will set a required password field on the User list. If you've used this to set up your project you will need to modify your list schema to set the field as not required, or remove it entirely if you don't plan to use the default Keystone auth system at all.

Contributing

If you want to run this package locally After cloning run yarn install and either:

  • yarn dev to run both the frontend and backend or
  • yarn dev:backend for just the backend

The Demo App is configured in next.config.js to proxy /api/auth to the the host setup using the environment variable BACKEND_BASE_URL in development set export BACKEND_BASE_URL=http://localhost:3000 you will also need to set your NEXTAUTH_URL environment variable see https://next-auth.js.org/configuration/options for more information.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].