Получение 400 ответов от Firebase Auth REST API

# #reactjs #redux #react-redux #firebase-authentication

Вопрос:

Я учусь реагировать и пытаюсь понять, как зарегистрироваться в Firebase. Просто не могу понять, что я делаю не так. Спасибо всем вам за любую помощь. Я использую ссылку для запроса отсюда: https://firebase.google.com/docs/reference/rest/auth?hl=cs

Вот код моего запроса:

 export const signInUser = () => {
  return async (dispatch) => {
    const sendSignInRequest = async () => {
      const response = await fetch(
        "https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=AIzaSyDkDPtv28NKNnAxKYN_RFTG36lp3-IraAE",
        {
          method: "POST",
          body: JSON.stringify({
            email: "QWERTY12345@GMAIL.COM",
            password: "12345TREWQ!asd",
            returnSecureToken: true,
          }),
          headers: {
            "Content-Type": "application/json",
          },
        }
      ).then((res) => {
        console.log(res);
        return res;
      });

      return response;
    };

    try {
      const respnseStatus = await sendSignInRequest();
    } catch (error) {
      console.log(error);
    }
  };
};
 

это то, что я получаю от сервера:

 Response {
    type: 'cors', 
    url: 'https://identitytoolkit.googleapis.com/v1/accounts…ignUp?key=AIzaSyDkDPtv28NKNnAxKYN_RFTG36lp3-IraAE', 
    redirected: false, 
    status: 400, 
    ok: false, 
…}
 

Спасибо.

Ответ №1:

  • Я думаю, что ошибка здесь в том, что это электронное письмо уже существует, потому что вы его жестко закодировали, чтобы оно было успешным только с первой попытки, а затем оно уже будет существовать, вы должны проверить, что, если статус ответа выдаст вам ошибку .

существует три типа ошибок, с которыми вы, возможно, столкнетесь при регистрации с помощью электронной почты и пароля в firebase

  • первая электронная почта уже существует
  • и второе-это TOO_MANY_ATTEMPTS_TRY_LATER
  • и третье-WEAK_PASSWORD : пароль должен состоять не менее чем из 6 символов, предпочтительно проверять этот пароль не менее чем из 6 символов перед отправкой его в API, чтобы вы всегда избегали третьей ошибки.

-и, кстати, вам не нужно использовать then здесь, пока вы используете асинхронность/ожидание, поэтому ваш код будет таким

  export const signInUser = (email,password) => {
      return async (dispatch) => {
        const sendSignInRequest = async () => {
          const response = await fetch(
            "https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=AIzaSyDkDPtv28NKNnAxKYN_RFTG36lp3-IraAE",
            {
              method: "POST",
              body: JSON.stringify({
                email: email
                password: password
                returnSecureToken: true,
              }),
              headers: {
                "Content-Type": "application/json",
              },
            }
          )
          const data =  await response.JSON();

         if (response.ok) {
            dispatch({type:'SIGN-UP'})
          } else if (!respnose.ok amp;amp; data.error.message === "EMAIL_EXISTS"){
            console.log('this email is already exist')
          } else if(!respnose.okamp;data.error.message ==="TOO_MANY_ATTEMPTS_TRY_LATER"){
            alert('TOO_MANY_ATTEMPTS_TRY_LATER')
          }
    
        };
    
        try {
          const respnseStatus = await sendSignInRequest();
  
        } catch (error) {
          console.log(error);
        }
}
};