From f30cd82e67365e74f9651f58e9bfb294f514a466 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20FAMIBELLE-PRONZOLA?= Date: Mon, 20 May 2024 04:16:02 +0400 Subject: [PATCH] Reset Passwords --- app/reset-password/form.js | 171 +++++++++++++++++++++++++++++++++++++ app/reset-password/page.js | 18 ++++ 2 files changed, 189 insertions(+) create mode 100644 app/reset-password/form.js create mode 100644 app/reset-password/page.js diff --git a/app/reset-password/form.js b/app/reset-password/form.js new file mode 100644 index 0000000..2b220c8 --- /dev/null +++ b/app/reset-password/form.js @@ -0,0 +1,171 @@ +'use client' + +import PropTypes from 'prop-types' +import {useState} from 'react' +import {passwordReset} from '@directus/sdk' +import {useRouter} from 'next/navigation' +import Typography from '@mui/material/Typography' +import Container from '@mui/material/Container' +import Box from '@mui/material/Box' +import FormControl from '@mui/material/FormControl' +import InputLabel from '@mui/material/InputLabel' +import OutlinedInput from '@mui/material/OutlinedInput' +import InputAdornment from '@mui/material/InputAdornment' +import IconButton from '@mui/material/IconButton' +import Button from '@mui/material/Button' +import FormHelperText from '@mui/material/FormHelperText' +import Visibility from '@mui/icons-material/Visibility' +import VisibilityOff from '@mui/icons-material/VisibilityOff' +import {directusClient} from '@/lib/directus.js' +import AuthAlert from '@/components/auth-form/auth-alert.js' + +export default function RequestResetForm({token}) { + const [isOpen, setIsOpen] = useState(false) + const [newPassword, setNewPassword] = useState('') + const [newPasswordVerification, setNewPasswordVerification] = useState('') + const [showPassword, setShowPassword] = useState(false) + const [showPasswordVerification, setShowPasswordVerification] = useState(false) + const [success, setSuccess] = useState('') + const [error, setError] = useState('') + const reset_token = token // eslint-disable-line camelcase + const router = useRouter() + + const handleClickShowPassword = () => { + setShowPassword(!showPassword) + } + + const handleMouseDownPassword = event => { + event.preventDefault() + } + + const handleClickShowPasswordVerifiation = () => { + setShowPasswordVerification(!showPasswordVerification) + } + + const handleMouseDownPasswordVerification = event => { + event.preventDefault() + } + + const handleFormSubmit = async e => { + e.preventDefault() + try { + await directusClient.request( + passwordReset(reset_token, newPassword) + ) + setSuccess('Mot de passe réinitialisé avec succès, redirection vers la page de connexion...') + setIsOpen(true) + setTimeout(() => { + router.push('/login') + }, 1000) + } catch (error) { + console.log(error) + setError('Le jeton de réinitialisation du mot de passe n’est pas valide, veuillez demander un nouveau lien de réinitialisation du mot de passe !') + setIsOpen(true) + } + } + + return ( + <> + {error && } + {success && } + + + + Fournir un nouveau mot de passe pour votre compte + + + Entrez votre nouveau mot de passe pour votre compte + + + Mot de passe + + + {showPassword ? : } + + + } + value={newPassword} + onChange={e => setNewPassword(e.target.value)} + /> + + + Vérification du mot de passe + + + {showPasswordVerification ? : } + + + } + onChange={e => setNewPasswordVerification(e.target.value)} + /> + {newPassword !== newPasswordVerification && ( + Les mots de passe ne correspondent pas ! + )} + + + + + + + + ) +} + +RequestResetForm.propTypes = { + token: PropTypes.string.isRequired +} diff --git a/app/reset-password/page.js b/app/reset-password/page.js new file mode 100644 index 0000000..f97a2a1 --- /dev/null +++ b/app/reset-password/page.js @@ -0,0 +1,18 @@ +import PropTypes from 'prop-types' +import {redirect} from 'next/navigation' +import ResetPasswordForm from './form.js' + +export default async function ResetPasswordPage({searchParams}) { + console.log('searchParams', searchParams) + const {token} = searchParams + + if (!token) { + redirect('/login') + } + + return () +} + +ResetPasswordPage.propTypes = { + searchParams: PropTypes.object +}