mirror of
https://github.com/Sonny93/my-links.git
synced 2025-12-10 07:25:35 +00:00
- Ajout création, édition, suppression catégories & liens - Ajout auth google - Ajout/modification style pour catégories & liens - Ajout component générique pour bouton, inputs, checkbox & selector - Gestion des messages d'erreur/succès/infos via component dédié - Ajout component FormLayout pour les pages création, édition, suppression catégories & liens - Page custom 404, 500 & signin - Modification schéma DB
61 lines
2.0 KiB
TypeScript
61 lines
2.0 KiB
TypeScript
import NextAuth from 'next-auth';
|
|
import GoogleProvider from 'next-auth/providers/google';
|
|
|
|
import { PrismaClient } from '@prisma/client';
|
|
const prisma = new PrismaClient();
|
|
|
|
export default NextAuth({
|
|
providers: [
|
|
GoogleProvider({
|
|
clientId: process.env.GOOGLE_CLIENT_ID,
|
|
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
|
|
authorization: {
|
|
params: {
|
|
prompt: 'consent',
|
|
access_type: 'offline',
|
|
response_type: 'code'
|
|
}
|
|
}
|
|
})
|
|
],
|
|
callbacks: {
|
|
async signIn({ account: accountParam, profile }) { // TODO: Auth
|
|
if (accountParam.provider !== 'google') {
|
|
return '/signin?error=' + encodeURI('Authentitifcation via Google requise');
|
|
}
|
|
|
|
const email = profile?.email;
|
|
if (email === '') {
|
|
return '/signin?error=' + encodeURI('Impossible de récupérer l\'email associé à ce compte Google');
|
|
}
|
|
|
|
const googleId = profile?.sub;
|
|
if (googleId === '') {
|
|
return '/signin?error=' + encodeURI('Impossible de récupérer l\'identifiant associé à ce compte Google');
|
|
}
|
|
|
|
try {
|
|
const account = await prisma.user.findFirst({
|
|
where: {
|
|
google_id: googleId,
|
|
email
|
|
}
|
|
});
|
|
|
|
if (!account) {
|
|
return '/signin?error=' + encodeURI('Vous n\'êtes pas autorisé à vous connecter avec ce compte Google');
|
|
} else {
|
|
return true;
|
|
}
|
|
} catch (error) {
|
|
console.error(error);
|
|
return '/signin?error=' + encodeURI('Une erreur est survenue lors de l\'authentification');
|
|
}
|
|
}
|
|
},
|
|
pages: {
|
|
signIn: '/signin',
|
|
error: '/signin'
|
|
}
|
|
});
|