chore: simplify next-auth (#80)
This commit is contained in:
parent
5912336152
commit
012ea40414
8 changed files with 55 additions and 116 deletions
63
auth.ts
63
auth.ts
|
|
@ -1,64 +1,35 @@
|
|||
import NextAuth from 'next-auth'
|
||||
import NextAuth, { type DefaultSession } from 'next-auth'
|
||||
import GitHub from 'next-auth/providers/github'
|
||||
import CredentialsProvider from 'next-auth/providers/credentials'
|
||||
import { NextResponse } from 'next/server'
|
||||
|
||||
// We default to using GitHub for authentication for local development and production.
|
||||
// On Preview deployments, we use a dummy credentials provider. This allows folks to easily
|
||||
// test the app without having to create a custom GitHub OAuth app or change the callback URL
|
||||
// just to test the application on previews.
|
||||
declare module 'next-auth' {
|
||||
interface Session {
|
||||
user: {
|
||||
/** The user's id. */
|
||||
id: string
|
||||
} & DefaultSession['user']
|
||||
}
|
||||
}
|
||||
|
||||
// We have a custom /sign-in page for non-preview environments. In preview environments, the user
|
||||
// will be redirected to /api/auth/signin instead.
|
||||
export const {
|
||||
handlers: { GET, POST },
|
||||
auth,
|
||||
CSRF_experimental
|
||||
// @ts-ignore
|
||||
} = NextAuth({
|
||||
// @ts-ignore
|
||||
providers: [
|
||||
process.env.VERCEL_ENV === 'preview'
|
||||
? CredentialsProvider({
|
||||
name: 'Credentials',
|
||||
credentials: {
|
||||
username: {
|
||||
label: 'Username',
|
||||
type: 'text',
|
||||
placeholder: 'jsmith'
|
||||
},
|
||||
password: { label: 'Password', type: 'password' }
|
||||
},
|
||||
async authorize(credentials) {
|
||||
return {
|
||||
id: 1,
|
||||
name: 'J Smith',
|
||||
email: 'jsmith@example.com',
|
||||
picture: 'https://i.pravatar.cc/150?u=jsmith@example.com'
|
||||
} as any
|
||||
}
|
||||
})
|
||||
: GitHub
|
||||
],
|
||||
providers: [GitHub],
|
||||
callbacks: {
|
||||
// @ts-ignore
|
||||
jwt: async ({ token, profile }) => {
|
||||
if (profile?.id) {
|
||||
jwt({ token, profile }) {
|
||||
if (profile) {
|
||||
token.id = profile.id
|
||||
token.image = profile.picture
|
||||
}
|
||||
return token
|
||||
},
|
||||
// @ts-ignore
|
||||
authorized({ auth }) {
|
||||
return !!auth?.user
|
||||
},
|
||||
trustHost: true
|
||||
}
|
||||
},
|
||||
...(process.env.VERCEL_ENV === 'preview'
|
||||
? {}
|
||||
: {
|
||||
pages: {
|
||||
signIn: '/sign-in'
|
||||
}
|
||||
})
|
||||
pages: {
|
||||
signIn: '/sign-in'
|
||||
}
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue