Проверка подлинности по электронной почте Firebase приводит к странице с надписью «Обнаружена ошибка» — «Выбранный режим страницы недействителен»

#javascript #firebase #firebase-authentication

#javascript #firebase #firebase-аутентификация

Вопрос:

Я нахожусь на локальном хосте с Firebase auth (firebase v7.23.0). Электронное письмо отправлено нормально. Я нажимаю ссылку входа в систему из своего электронного письма. Я получаю эту страницу с ошибкой в моем <PROJECT>.firebaseapp.com

!

Мой код в основном приведен ниже, но все это работает. Это страница Firebase выдает ошибку. Я не уверен, что еще мне нужно настроить. localhost находится в разрешенных доменах. Ошибка находится на стороне Firebase, поэтому я не могу ничего сделать для ее отладки или исправления.

 const actionCodeSettings = {
  // URL you want to redirect back to. The domain (www.example.com) for this
  // URL must be whitelisted in the Firebase Console.
  // url: `${window.location.protocol}//${window.location.host}/`,
  url: http://localhost:7000/#postLogin,
  // This must be true.
  handleCodeInApp: true
};

firebase.auth().sendSignInLinkToEmail(this.email, actionCodeSettings)
        .then(() => {
          // The link was successfully sent. Inform the user.
          // Save the email locally so you don't need to ask the user for it again.
          window.localStorage.setItem('email', this.email);
        })
        .catch(error => {
          // Some error occurred, you can inspect the code: error.code
        });
    }
  

Ответ №1:

Я не уверен, как вам удалось получить этот URL. Либо вы удалили apiKey из своего URL, чтобы прикрепить скриншот на SO, либо вы что-то неправильно настроили, из-за чего apiKey не включен в ссылку для подтверждения электронной почты.

Чтобы проверить свою гипотезу, я создал новое приложение firebase и развернул его на https://test-auth-79dae.firebaseapp.com / у которого просто есть кнопка отправки ссылки на электронную почту, которая отправляет электронное письмо самому себе, и ссылка на электронную почту работает, если я нажимаю на ссылку подтверждения, полученную по электронной почте. Это не сработает, только если я удалю apiKey из ссылки в электронном письме.

введите описание изображения здесь

Ваша ссылка на электронную почту должна быть:

https://test-auth-79dae.firebaseapp.com/__/auth/action?apiKey={yourApiKey}amp;oobCode={obbCode}amp;continueUrl={urlParameter}amp;lang=en

Комментарии:

1. Спасибо. Да, API по какой-то причине не передается. Я настроил его с помощью initializeApp, и все остальное работает. firebase.initializeApp({apiKey: 'abc123'}) . Я проверю, почему ключ API не отображается в URL-адресе в электронном письме.

2. Проверьте свой шаблон электронной почты, возможно, вы что-то там найдете.

3. У меня не было времени взглянуть, но отсутствующий ключ API в URL-адресе является 100%-ным преимуществом. Был еще один ответ с многообещающим выводом (хэштег в URL). На данный момент я собираюсь наградить награду за это. Спасибо!

4. @ngokevin Я действительно пробовал использовать хэш-тег в URL-адресе в электронном письме, и, к вашему сведению, это не проблема.

Ответ №2:

Когда пользователь нажимает на ссылку электронной почты, он попадает на страницу. допустим /register/complete .

Итак, для этого у вас должен быть следующий код:

 const actionCodeSettings = {
  url: `http://localhost:3000/register/complete,
  handleCodeInApp: true
};
  

Ваша проблема может быть в этом URL-адресе, который у вас есть:

 url: `${window.location.protocol}//${window.location.host}/`,
  

Комментарии:

1. Спасибо! Я попытался жестко закодировать URL-адрес, но проблема все еще остается. Жестко или нет, continueUrl в ссылке входа остается тем же: «…continueUrl= localhost:7000/#loginPost …»

2. В вашем URL-адресе не должно быть%. Я вижу, у вас их два // . удалите один / , и он должен работать. Убедитесь, что в URL нет лишних символов или пустого места.

Ответ №3:

Проблема должна быть решена, это была проблема со стороны Firebase. У меня была такая же проблема, и через их службу поддержки они заверили меня, что это с их стороны.

Ответ №4:

У меня возникла эта проблема, когда параметр link был возвращен с сервера без URL-кода.

Так что эта ссылка выдавала ошибку:

 https://link.mydomain.com.ua/?link=https://mydomain.com.ua/__/auth/action?mode=verifyEmailamp;oobCode=blablablaamp;apiKey=blablablaamp;continueUrl=...
  

Хотя это сработало при преобразовании в это:

 https://link.mydomain.com.ua/?link=https://mydomain.com.ua/__/auth/action?mode=verifyEmail&oobCode=blablabla&apiKey=blablabla&continueUrl=...
  

Комментарии:

1. Ну, как ты это сделал? Я использую Firebase SDK для Swift, и я не имею ни малейшего представления о том, как получить, не говоря уже о кодировании ?link= параметра url

2. @Throvn В моем случае ссылка была сгенерирована серверными инженерами, поэтому я попросил их закодировать ее по url. Если вы создаете ссылку на iOS, я полагаю, вы можете использовать .addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)