#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=
параметра url2. @Throvn В моем случае ссылка была сгенерирована серверными инженерами, поэтому я попросил их закодировать ее по url. Если вы создаете ссылку на iOS, я полагаю, вы можете использовать
.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)