Skip to content

Instantly share code, notes, and snippets.

@MohammedALREAI
Created June 30, 2021 15:41
Show Gist options
  • Save MohammedALREAI/6913bab17f8e85583040230c023d0899 to your computer and use it in GitHub Desktop.
Save MohammedALREAI/6913bab17f8e85583040230c023d0899 to your computer and use it in GitHub Desktop.
import { NextApiRequest, NextApiResponse } from 'next';
import NextAuth, { InitOptions } from 'next-auth';
import Providers from 'next-auth/providers';
import { SessionUser } from 'lib/data-types';
import { getUserFromId, updateUser } from 'db/user-dao';
const options: InitOptions = {
providers: [
Providers.GitHub({
clientId: process.env.GITHUB_ID || '',
clientSecret: process.env.GITHUB_SECRET || '',
}),
],
database: process.env.DATABASE_URL,
session: {
jwt: true,
},
callbacks: {
async session(session, user) {
const sessionUser: SessionUser = {
...session.user,
id: user.id,
username: user.username,
role: user.role,
};
return Promise.resolve({
...session,
user: sessionUser,
});
},
async jwt(token, user, _account, profile) {
let response = token;
if (user?.id) {
let dbUser = await getUserFromId(user.id);
if (!dbUser.username && profile.login) {
dbUser = await updateUser(user.id, { username: profile.login });
}
response = {
...token,
id: user?.id,
username: dbUser.username,
role: dbUser.role,
};
}
return Promise.resolve(response);
},
},
};
export default (req: NextApiRequest, res: NextApiResponse) =>
NextAuth(req, res, options);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment