Skip to content

Commit

Permalink
Improved user checks on NextJS server action endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
FlorianLeChat committed Dec 19, 2023
1 parent 161d4b4 commit 6dcb987
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 17 deletions.
31 changes: 26 additions & 5 deletions app/[locale]/authentication/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@

import prisma from "@/utilities/prisma";
import schema from "@/schemas/authentication";
import { signIn, signOut } from "@/utilities/next-auth";
import { redirect } from "next/navigation";
import { auth, signIn, signOut } from "@/utilities/next-auth";

//
// Enregistrement d'un nouveau compte utilisateur.
Expand All @@ -17,8 +18,18 @@ export async function signUpAccount(
formData: FormData
)
{
// On tente d'abord de valider les informations d'authentification
// fournies par l'utilisateur.
// On récupère d'abord la session de l'utilisateur.
const session = await auth();

if ( session )
{
// Si la session existe, on redirige l'utilisateur vers la page
// de son tableau de bord.
return redirect( "/dashboard" );
}

// On tente de valider les informations d'authentification fournies
// par l'utilisateur.
const result = schema.safeParse( {
email: formData.get( "email" ),
password: ""
Expand Down Expand Up @@ -99,8 +110,18 @@ export async function signInAccount(
formData: FormData
)
{
// On vérifie d'abord si l'utilisateur a tenté de se connecter via
// un fournisseur d'authentification externe.
// On récupère d'abord la session de l'utilisateur.
const session = await auth();

if ( session )
{
// Si la session existe, on redirige l'utilisateur vers la page
// de son tableau de bord.
return redirect( "/dashboard" );
}

// On vérifie si l'utilisateur a tenté de se connecter via
// fournisseur d'authentification externe.
const provider = formData.get( "provider" );

if ( provider )
Expand Down
10 changes: 4 additions & 6 deletions app/[locale]/settings/account/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import prisma from "@/utilities/prisma";
import schema from "@/schemas/account";
import { auth } from "@/utilities/next-auth";
import { cookies } from "next/headers";
import { redirect } from "next/navigation";

//
// Mise à jour des informations du compte utilisateur.
Expand All @@ -23,12 +24,9 @@ export async function updateAccount(

if ( !session )
{
// Si la session n'existe pas, on affiche un message d'erreur
// dans le formulaire (cela ne devrait jamais arriver).
return {
success: false,
reason: "form.errors.invalid"
};
// Si la session n'existe pas, on redirige l'utilisateur vers
// la page d'accueil.
return redirect( "/" );
}

// On tente ensuite de valider les données du formulaire.
Expand Down
10 changes: 4 additions & 6 deletions app/[locale]/settings/profile/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import prisma from "@/utilities/prisma";
import schema from "@/schemas/profile";
import { auth } from "@/utilities/next-auth";
import { redirect } from "next/navigation";
import { mkdir, writeFile } from "fs/promises";

//
Expand All @@ -22,12 +23,9 @@ export async function updateProfile(

if ( !session )
{
// Si la session n'existe pas, on affiche un message d'erreur
// dans le formulaire (cela ne devrait jamais arriver).
return {
success: false,
reason: "form.errors.invalid"
};
// Si la session n'existe pas, on redirige l'utilisateur vers
// la page d'accueil.
return redirect( "/" );
}

// On tente ensuite de valider les données du formulaire.
Expand Down

0 comments on commit 6dcb987

Please sign in to comment.