diff --git a/api/controllers/users.js b/api/controllers/users.js index ed602ec..e6fc0dc 100644 --- a/api/controllers/users.js +++ b/api/controllers/users.js @@ -104,7 +104,7 @@ exports.resetPassword = async (req, res, next) => { from: `"FunctionProject" <${EMAIL_INFO.auth.user}>`, to: email, subject: "FunctionProject - Réinitialisation du mot de passe", - html: emailTemplate("Veuillez confirmer la réinitialisation du mot de passe", "Oui, je change mon mot de passe.", `${FRONT_END_HOST}/new-password?token=${tempToken}`, "Si vous avez reçu ce message par erreur, il suffit de le supprimer. Votre mot de passe ne sera pas réinitialiser si vous ne cliquez pas sur le lien ci-dessus. Par ailleurs, pour la sécurité de votre compte, la réinitialisation du mot de passe est disponible pendant un délai de 1 heure, passez ce temps, la réinitialisation ne sera plus valide.") + html: emailTemplate("Veuillez confirmer la réinitialisation du mot de passe", "Oui, je change mon mot de passe.", `${FRONT_END_HOST}/newPassword?token=${tempToken}`, "Si vous avez reçu ce message par erreur, il suffit de le supprimer. Votre mot de passe ne sera pas réinitialiser si vous ne cliquez pas sur le lien ci-dessus. Par ailleurs, pour la sécurité de votre compte, la réinitialisation du mot de passe est disponible pendant un délai de 1 heure, passez ce temps, la réinitialisation ne sera plus valide.") }); return res.status(200).json({ result: "Demande de réinitialisation du mot de passe réussi, veuillez vérifier vos emails!" }); } catch (error) { diff --git a/website/components/Header/Header.js b/website/components/Header/Header.js index f04ef31..da33eae 100644 --- a/website/components/Header/Header.js +++ b/website/components/Header/Header.js @@ -1,6 +1,7 @@ import { Fragment, useState, useContext } from 'react'; import { UserContext } from '../../contexts/UserContext'; import Link from 'next/link'; +import { useRouter } from 'next/router'; import NavigationLink from './NavigationLink'; import './Header.css'; @@ -8,6 +9,7 @@ export default function Header() { const { isAuth, logoutUser, user } = useContext(UserContext); const [isActive, setIsActive] = useState(false); + const { pathname } = useRouter(); const toggleNavbar = () => { setIsActive(!isActive); @@ -44,10 +46,9 @@ export default function Header() { : - {/* */}
  • - Mon Profil + Mon Profil
  • diff --git a/website/contexts/UserContext.js b/website/contexts/UserContext.js index 77617b8..c28a279 100644 --- a/website/contexts/UserContext.js +++ b/website/contexts/UserContext.js @@ -41,9 +41,9 @@ function UserContextProvider(props) { } const logoutUser = () => { + cookies.remove('user'); setUser(null); setIsAuth(false); - cookies.remove('user'); } return ( diff --git a/website/pages/forgotPassword.js b/website/pages/forgotPassword.js new file mode 100644 index 0000000..3ead3da --- /dev/null +++ b/website/pages/forgotPassword.js @@ -0,0 +1,73 @@ +import { Fragment, useState } from 'react'; +import htmlParser from 'html-react-parser'; +import Loader from '../components/Loader'; +import HeadTag from '../components/HeadTag'; +import '../public/css/pages/register-login.css'; +import api from '../utils/api'; + +const forgotPassword = () => { + + const [inputState, setInputState] = useState({}); + const [message, setMessage] = useState(""); + const [isLoading, setIsLoading] = useState(false); + + const handleChange = () => { + const inputStateNew = { ...inputState }; + inputStateNew[event.target.name] = event.target.value; + setInputState(inputStateNew); + } + + const handleSubmit = (event) => { + setIsLoading(true); + event.preventDefault(); + api.post('/users/reset-password', inputState) + .then(({ data }) => { + setMessage(`

    Succès: ${data.result}

    `); + setIsLoading(false); + setInputState({}); + }) + .catch((error) => { + setMessage(`

    Erreur: ${error.response.data.message}

    `); + setIsLoading(false); + }); + } + + return ( + + +
    +
    +
    +

    Mot de passe oublié ?

    +
    +

    Demandez une demande de réinitialisation de mot de passe par email.

    +
    +
    +
    + + +
    +
    + +
    +
    +
    + { + (isLoading) ? + + : + htmlParser(message) + } +
    +
    +
    +
    +
    + ); + +} + +export default forgotPassword; \ No newline at end of file diff --git a/website/pages/login.js b/website/pages/login.js index 4edb762..bb6060f 100644 --- a/website/pages/login.js +++ b/website/pages/login.js @@ -27,7 +27,7 @@ const Login = () => { return (
    @@ -44,7 +44,7 @@ const Login = () => {

    - + Mot de passe oublié ?

    diff --git a/website/pages/newPassword.js b/website/pages/newPassword.js new file mode 100644 index 0000000..704d0a9 --- /dev/null +++ b/website/pages/newPassword.js @@ -0,0 +1,77 @@ +import { Fragment, useState } from 'react'; +import htmlParser from 'html-react-parser'; +import Loader from '../components/Loader'; +import HeadTag from '../components/HeadTag'; +import '../public/css/pages/register-login.css'; +import api from '../utils/api'; +import redirect from '../utils/redirect'; + +const newPassword = (props) => { + + const [inputState, setInputState] = useState({}); + const [message, setMessage] = useState(""); + const [isLoading, setIsLoading] = useState(false); + + const handleChange = () => { + const inputStateNew = { ...inputState }; + inputStateNew[event.target.name] = event.target.value; + setInputState(inputStateNew); + } + + const handleSubmit = (event) => { + setIsLoading(true); + event.preventDefault(); + api.put('/users/reset-password', { ...inputState, tempToken: props.token }) + .then(({ data }) => { + setMessage(`

    Succès: ${data.result}

    `); + setIsLoading(false); + setInputState({}); + }) + .catch((error) => { + setMessage(`

    Erreur: ${error.response.data.message}

    `); + setIsLoading(false); + }); + } + + return ( + + +
    +
    +
    +

    Nouveau mot de passe

    +
    +
    + + +
    +
    + +
    +
    +
    + { + (isLoading) ? + + : + htmlParser(message) + } +
    +
    +
    +
    +
    + ); +} + +newPassword.getInitialProps = (context) => { + if (context.query.token != undefined) { + return context.query; + } + return redirect(context, '/404'); +} + +export default newPassword; \ No newline at end of file diff --git a/website/pages/register.js b/website/pages/register.js index 1f9923a..70de711 100644 --- a/website/pages/register.js +++ b/website/pages/register.js @@ -35,7 +35,7 @@ const Register = () => { return (