Вот поток:
Если пользователь входит в недопустимое электронное письмо или пароль, я хочу показать правильное сообщение об ошибке.
Если пользователь не существует, я хочу показать «нет учетной записи». /> Но сейчас Firebase всегда дает мне одинаковое сообщение об ошибке: «Неверные учетные данные». < /p>
Вот код < /p>
import {
Sun,
Moon,
Lock,
Eye,
EyeOff,
Mail,
Chrome,
} from "lucide-react";
import { Link, useNavigate } from "react-router-dom";
import { getAuth, GoogleAuthProvider, signInWithEmailAndPassword, signInWithPopup } from 'firebase/auth'
import { firebase } from "./Firebase";
import { useContext, useEffect, useState } from "react";
import { ThemeContext } from "./Theme";
export const Login = () => {
const [showPassword, setShowPassword] = useState(false);
const [user, setUser] = useState([])
const [isLoading, setIsLoading] = useState(false);
const [formData, setForData] = useState({
email: '',
password: ''
})
const [error, setError] = useState({
email: '',
password: ''
})
const [check, setCheck] = useState({
email: false,
password: false
})
const { theme, setTheme } = useContext(ThemeContext)
const navigate = useNavigate()
// handle Form Data
function handleFormData(e) {
const { name, value } = e.target;
setForData((prev) => ({ ...prev, [name]: value }));
// email validation
const emailIDRegex = /^[a-zA-Z0-9-+._]+@[a-zA-Z0-9+-]+\.[a-zA-Z]{2,}$/;
if (name == 'email') {
if (value.trim() == '') {
setError((prev) => ({ ...prev, email: "Enter Email id" }));
setCheck((prev) => ({ ...prev, email: false }));
}
else if (!emailIDRegex.test(value.trim())) {
setError((prev) => ({ ...prev, email: "Invalid Email id" }));
setCheck((prev) => ({ ...prev, email: false }));
}
else {
setError((prev) => ({ ...prev, email: "" }));
setCheck((prev) => ({ ...prev, email: true }));
}
}
// password validation
if (name == 'password') {
if (value.trim() == '') {
setError((prev) => ({ ...prev, password: "Enter password" }));
setCheck((prev) => ({ ...prev, password: false }));
}
else if (value.length < 6) {
setError((prev) => ({ ...prev, password: "Password must be at least 6 characters" }));
setCheck((prev) => ({ ...prev, password: false }));
}
else {
setError((prev) => ({ ...prev, password: "" }));
setCheck((prev) => ({ ...prev, password: true }));
}
}
}
// Google Sign In
function handleGoogleSignIn() {
setIsLoading(true);
const auth = getAuth(firebase);
const provider = new GoogleAuthProvider
signInWithPopup(auth, provider)
.then((res) => {
console.log(res);
setUser(res.user)
})
.catch((error) => {
console.log(error)
})
.finally(() => {
setIsLoading(false);
})
}
function handleFormSubmit(e) {
e.preventDefault();
const allValid = Object.entries(check).every((v) => v[1] == true)
if (!allValid) {
Object.entries(check).forEach((v) => {
if (v[1] == false) {
const inputName = v[0];
setError((prev) => ({ ...prev, [inputName]: `Enter your ${inputName}` }));
setCheck((prev) => ({ ...prev, [inputName]: false }));
}
})
return;
}
else {
setIsLoading(true);
const auth = getAuth(firebase)
signInWithEmailAndPassword(auth, formData.email, formData.password)
.then((userdata) => {
console.log(userdata.user);
})
.catch((error) => {
console.log("Firebase Error:", error.code, error.message);
if (error.code === "auth/user-not-found") {
setError((prev) => ({ ...prev, email: "No account found with this email." }));
}
else if (error.code === "auth/wrong-password") {
setError((prev) => ({ ...prev, password: "Incorrect password." }));
}
else if (error.code === "auth/invalid-email") {
setError((prev) => ({ ...prev, email: "Invalid email format." }));
}
else {
alert("Something went wrong: " + error.message);
}
})
.finally(() => {
setIsLoading(false);
})
}
}
useEffect(() => {
localStorage.setItem('UserData', JSON.stringify(user))
}, [user])
return (
{/* Header */}
setTheme(theme == 'dark' ? 'light' : 'dark')}>
{theme == 'dark' ? : }
Welcome Back
Sign in to your account
{/* Google Sign In */}
onClick={handleGoogleSignIn}
disabled={isLoading}
className={`group relative w-full flex justify-center items-center py-3 px-4 border border-transparent rounded-lg text-sm font-medium transition-all duration-200 cursor-pointer
${theme === 'dark'
? 'bg-gray-700 text-white hover:bg-gray-600 border-gray-600'
: 'bg-white text-gray-700 hover:bg-gray-50 border-gray-300 shadow-sm'
} ${isLoading ? 'opacity-50 cursor-not-allowed' : 'hover:shadow-md'}`}
>
{isLoading ? 'Signing in...' : 'Continue with Google'}
{/* Divider */}
Or continue with email
{/* Email Input */}
Email Address
{error.email && (
{error.email}
)}
{/* Password Input */}
Password
setShowPassword(!showPassword)}
className="absolute inset-y-0 right-0 pr-3 flex items-center"
>
{showPassword ? (
) : (
)}
{error.password && (
{error.password}
)}
{/* Submit Button */}
{isLoading ? (
Signing in...
) : (
'Sign In'
)}
{/* Footer */}
Don't have an account?{" "}
Create account
);
};
< /code>
Когда я пытаюсь:
электронное письмо, которое не существует
или неправильный пароль
Подробнее здесь: https://stackoverflow.com/questions/797 ... ls-instead
Мобильная версия