khronoz's picture
Initial Commit
0702eb8
raw
history blame
2.41 kB
import { NextAuthOptions } from 'next-auth';
import GoogleProvider from 'next-auth/providers/google';
import type { GetServerSidePropsContext, NextApiRequest, NextApiResponse } from "next"
import { getServerSession } from "next-auth"
// You'll need to import and pass this
// to `NextAuth` in `app/api/auth/[...nextauth]/route.ts`
export const config = {
// Configure one or more authentication providers
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_CLIENT_ID as string,
clientSecret: process.env.GOOGLE_CLIENT_SECRET as string,
}),
{
id: 'sgid',
name: 'SGID',
type: 'oauth',
issuer: 'https://api.id.gov.sg/v2',
authorization: {
url: 'https://api.id.gov.sg/v2/oauth/authorize',
params: { scope: 'openid myinfo.name' },
},
jwks_endpoint: 'https://api.id.gov.sg/v2/.well-known/jwks.json',
token: 'https://api.id.gov.sg/v2/oauth/token',
userinfo: 'https://api.id.gov.sg/v2/oauth/userinfo',
checks: ['pkce', 'state'],
idToken: true,
client: { token_endpoint_auth_method: 'client_secret_post' },
clientId: process.env.SGID_CLIENT_ID,
clientSecret: process.env.SGID_CLIENT_SECRET,
profile(profile) {
return {
id: profile.sub,
}
},
},
],
pages: {
signIn: '/sign-in',
},
callbacks: {
async jwt({ token, user, account, profile }) {
// Persist the OAuth access_token to the token right after signin
if (account) {
token.id_token = account.id_token
token.provider = account.provider
token.accessToken = account.access_token
}
return token
},
async session({ session, token, user }) {
// Send properties to the client, like an access_token from a provider.
session.accessToken = token.accessToken as string
return session
}
}
} satisfies NextAuthOptions
// Use it in server contexts
export async function auth(...args: [GetServerSidePropsContext["req"], GetServerSidePropsContext["res"]] | [NextApiRequest, NextApiResponse] | []) {
return getServerSession(...args, config)
}