Gestion et affichage des erreurs + redirection apr connexion réussi

pull/81/head
Baptiste MARCEL 1 year ago
parent 6afa571c56
commit d737280f1b

@ -1,31 +1,54 @@
import React, { Component } from 'react'; import React, { useState, useEffect } from 'react';
import { AiOutlineSend } from 'react-icons/ai'; import { AiOutlineSend } from 'react-icons/ai';
import { useNavigate } from 'react-router-dom';
import AuthService from '../services/AuthService'; import AuthService from '../services/AuthService';
import '../Style/Global.css'; import '../Style/Global.css';
export default class Login extends Component { const SignIn = () => {
handleSubmit = async (event: any) => { const navigate = useNavigate();
const [error, setError] = useState<string | null>(null);
const [showConfirmation, setShowConfirmation] = useState(false);
const handleSubmit = async (event: React.FormEvent) => {
event.preventDefault(); event.preventDefault();
try { try {
const data = { const data = {
pseudo: event.target.pseudo.value, pseudo: (event.target as any).pseudo.value,
password: event.target.password.value, password: (event.target as any).password.value,
remember: event.target.remember.value remember: (event.target as any).remember.checked
}; };
const validation = await AuthService.validateSignIn(data);
if (!validation.valid) {
setError(validation.error);
} else {
setError(null);
const result = await AuthService.signIn(data); const result = await AuthService.signIn(data);
console.log(result); // console.log(result);
alert('Connexion réussie !');
setShowConfirmation(true);
setTimeout(() => {
navigate('/play'); // 3 secondes avant de rediriger vers la page de connexion
}, 3000);
} }
catch(error){ } catch (error: any) {
console.error(error); setError(error.message);
} }
}; };
render() { useEffect(() => {
return () => {
setShowConfirmation(false);
};
}, []);
return ( return (
<div className="form-container"> <div className="form-container">
<form onSubmit={this.handleSubmit}> <form onSubmit={handleSubmit}>
<br/> <br/>
<h3>Log In</h3> <h3>Log In</h3>
<div className="mb-3"> <div className="mb-3">
@ -68,7 +91,20 @@ export default class Login extends Component {
<a href="#">Mot de passe</a> oublié ? <a href="#">Mot de passe</a> oublié ?
</p> </p>
</form> </form>
{error && (
<div className="alert alert-danger" role="alert">
{error}
</div> </div>
) )}
}
} {showConfirmation && (
<div className="alert alert-success" role="alert">
Connexion réussie ! Vous serez redirigé vers votre profil dans 3 secondes.
</div>
)}
</div>
);
};
export default SignIn;

@ -1,11 +1,11 @@
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import { AiOutlineSend } from 'react-icons/ai'; import { AiOutlineSend } from 'react-icons/ai';
import { useNavigate } from 'react-router-dom'; // Use useNavigate instead of useHistory import { useNavigate } from 'react-router-dom';
import AuthService from '../services/AuthService'; import AuthService from '../services/AuthService';
import '../Style/Global.css'; import '../Style/Global.css';
const SignUp = () => { const SignUp = () => {
const navigate = useNavigate(); // Use useNavigate instead of useHistory const navigate = useNavigate();
const [error, setError] = useState<string | null>(null); const [error, setError] = useState<string | null>(null);
const [showConfirmation, setShowConfirmation] = useState(false); const [showConfirmation, setShowConfirmation] = useState(false);

@ -7,6 +7,10 @@ class AuthService{
return VerificationService.validateSignUpData(data); return VerificationService.validateSignUpData(data);
} }
static async validateSignIn(data: any): Promise<{valid: boolean, error: string}> {
return VerificationService.validateSignInData(data);
}
static async signUp(data: any) { static async signUp(data: any) {
try { try {
const response = await fetch('http://localhost:3000/auth/signup', { const response = await fetch('http://localhost:3000/auth/signup', {
@ -44,9 +48,11 @@ class AuthService{
const result = await response.json(); const result = await response.json();
return result; return result;
} else { } else {
throw new Error('Échec de la connexion.'); const errorResponse = await response.json();
throw new Error(errorResponse.error);
} }
} catch (error) { }
catch (error) {
console.error(error); console.error(error);
throw error; throw error;
} }

@ -14,6 +14,18 @@ class ValidationService {
return {valid: true, error: ''}; return {valid: true, error: ''};
} }
public static validateSignInData(data: any): {valid: boolean, error: string} {
if(!data.pseudo || !data.password) {
return {valid: false, error: 'Veuillez remplir tous les champs.'};
}
if(data.password.length < 8) {
return {valid: false, error: 'Le mot de passe doit contenir au moins 8 caractères.'};
}
return {valid: true, error: ''};
}
} }
export default ValidationService; export default ValidationService;
Loading…
Cancel
Save