I’m creating an authentication workflow for my android app. I’m allowing users to sign in with username/password and various OAuth providers. I’m validating emails and password so that, I know the information I’m passing to Firebase is valid. I’m using com.google.firebase:firebase-auth:9.6.1
When I execute the following code, I get a callback that says the operation not successful with an error.
mFirebaseAuth.signInWithEmailAndPassword(username,password).addOnCompleteListener(this);
Callback function or completion listener tells me
com.google.firebase.FirebaseNetworkException: A network error (such as timeout, interrupted connection or unreachable host) has occurred.
The username I’m passing doesn’t exist yet. So, I would assume to see some kind of error stating the user doesn’t exist. Am I passing something incorrectly or am I assuming incorrectly? I can also see that in the Firebase documentation, the iOS library has a various error codes common to all API methods section where as the Android section doesn’t show this. One of these exceptions is FIRAuthErrorCodeUserNotFound
. So, does that functionality even exists in the Android library?
[REQUIRED] Step 1: Describe your environment
- Xcode version: 12.4
- Firebase SDK version: Latest Version
- Installation method:
Swift Package Manager
- Firebase Component: Auth
[REQUIRED] Step 2: Describe the problem
Steps to reproduce:
The problem is similar to the title of the issue. I have implemented Firebase Login Successfully but whenever I hit login button it gives be error «Network error (such as timeout, interrupted connection or unreachable host) has occurred.»
Relevant Code:
import SwiftUI
import Firebase
struct TotalView: View {
@State private var email = ""
@State private var password = ""
@State private var wrongEmail = false
@State private var errorAlert = false
@State private var errorMessage = ""
var body: some View {
HStack{
VStack(alignment: .leading){
Text("Welcome Back!")
.font(.system(size: 50, weight: .heavy, design: .default))
.fontWeight(.heavy)
TextField("Email", text: $email, onEditingChanged: {(isChanged) in
if !isChanged {
if self.textFieldValidatorEmail(email) {
self.wrongEmail = false
} else {
self.wrongEmail = true
self.email = ""
}
}
})
.foregroundColor(.white)
.padding()
.background(Color("Background"))
.cornerRadius(12)
.shadow(color: Color("LightShadow"), radius: 8, x: -8, y: -8)
.shadow(color: Color("DarkShadow"), radius: 8, x: 8, y: 8)
.disableAutocorrection(true)
.textFieldStyle(PlainTextFieldStyle())
SecureField("Password", text: $password)
.padding()
.background(Color("Background"))
.cornerRadius(12)
.shadow(color: Color("LightShadow"), radius: 8, x: -8, y: -8)
.shadow(color: Color("DarkShadow"), radius: 8, x: 8, y: 8)
.textFieldStyle(PlainTextFieldStyle())
Button(action: {login()}, label: {
Text("Login")
.font(.title)
.foregroundColor(.white)
})
}
Spacer()
Divider()
.offset(x: 50, y: 0)
.frame(height: 300)
AuthBackground()
.blur(radius: 50)
} .frame(width: 800, alignment: .center)
.alert(isPresented: $wrongEmail, content: {
Alert(title: Text("Error"), message: Text("Invalid Email"), dismissButton: .default(Text("Okay")))
})
.alert(isPresented: $errorAlert, content: {
Alert(title: Text("Error"), message: Text(errorMessage), dismissButton: .default(Text("Okay")))
})
.padding()
}
func textFieldValidatorEmail(_ string: String) -> Bool {
if string.count > 100 {
return false
}
let emailFormat = "(?:[\p{L}0-9!#$%\&'*+/=?\^_`{|}~-]+(?:\.[\p{L}0-9!#$%\&'*+/=?\^_`{|}" + "~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\" + "x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[\p{L}0-9](?:[a-" + "z0-9-]*[\p{L}0-9])?\.)+[\p{L}0-9](?:[\p{L}0-9-]*[\p{L}0-9])?|\[(?:(?:25[0-5" + "]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-" + "9][0-9]?|[\p{L}0-9-]*[\p{L}0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21" + "-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])"
//let emailFormat = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,64}"
let emailPredicate = NSPredicate(format:"SELF MATCHES %@", emailFormat)
return emailPredicate.evaluate(with: string)
}
func login(){
Auth.auth().signIn(withEmail: email, password: password) { (result, error) in
if error != nil {
self.errorAlert = true
self.errorMessage = error?.localizedDescription ?? "An error occured"
} else {
print("login successful")
}
}
}
}
#java #android #firebase #firebase-authentication
# #java #Android #firebase #firebase-аутентификация
Вопрос:
Я создаю рабочий процесс аутентификации для своего приложения для Android. Я разрешаю пользователям входить в систему с помощью имени пользователя / пароля и различных поставщиков OAuth. Я проверяю электронную почту и пароль, чтобы быть уверенным, что информация, которую я передаю в Firebase, является действительной. Я использую com.google.firebase:firebase-auth:9.6.1
Когда я выполняю следующий код, я получаю обратный вызов, который сообщает, что операция не выполнена успешно с ошибкой.
mFirebaseAuth.signInWithEmailAndPassword(username,password).addOnCompleteListener(this);
Функция обратного вызова или прослушиватель завершения сообщают мне
com.google.firebase.FirebaseNetworkException: A network error (such as timeout, interrupted connection or unreachable host) has occurred.
Имя пользователя, которое я передаю, еще не существует. Итак, я бы предположил, что вижу какую-то ошибку, указывающую, что пользователь не существует. Я передаю что-то неправильно или я неправильно предполагаю? Я также вижу, что в документации Firebase библиотека iOS содержит различные коды ошибок, общие для всех разделов методов API, где, поскольку раздел Android этого не показывает. Одним из таких исключений является FIRAuthErrorCodeUserNotFound
. Итак, существует ли эта функциональность в библиотеке Android?
Комментарии:
1. Я бы определенно не сказал, что в нем указано, что пользователь не существует. Я думаю, это означает, что что-то не так с подключением -> телефон отключен, сервер не работает, сервер не отвечает и т.д.
2. Сейчас я сталкиваюсь с той же проблемой. у кого-нибудь есть идея, у которой уже есть решение? Спасибо
3. Я получаю аналогичное сообщение об ошибке
4. Я получаю аналогичное сообщение об ошибке (2)
5. Из приведенных ниже ответов это выглядит как обработчик ошибок по умолчанию для всех необработанных ошибок. Хорошая работа, Google!
Ответ №1:
Это также может произойти, когда службы Google Play не запущены. Попробуйте запустить play Store и проверьте, работает ли он. Если не проблема с перезагрузкой устройства.А также сравните сервисы Google Play, используемые в проекте, и сервисы Google Play на устройстве одинаковы, если не обновлять сервисы Google Play.
Это всего лишь незначительный, но возможный случай, когда он выдает исключение.
Ответ №2:
переход от <form></form>
к к <div></div>
решил эту проблему:
«Сетевая ошибка (например, тайм-аут, прерванное соединение или недоступный хост) произошла в элементе формы в HTML. Маленький жучок.»
Комментарии:
1. Это сделало это за меня. У меня была форма, но я сам управлял нажатием кнопки вместо того, чтобы делать сообщение или что-то в этом роде.
2. Решил ее. Спасибо. Есть идеи, почему?
3. Это решило проблему для меня, спустя 3 года после публикации этого ответа. Эхо @danh, кто-нибудь знает почему?
Ответ №3:
В вашем AndroidManifest.xml добавь, у меня это работает
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
Ответ №4:
<a (click)="login()" class="nav-link">Login</a>
Не помещайте href
атрибут в тег a
. Это помогло решить мой случай
Ответ №5:
Я столкнулся с той же проблемой. что решило мою проблему, очистив дополнительное пространство в API_KEY, поэтому я предлагаю проверить ваш GoogleService-Info.plist на
- API_KEY является правильным (без лишних пробелов)
- GOOGLE_APP_ID GOOGLE_APP_ID
- CLIENT_ID
Я думаю, это может вам помочь
Ответ №6:
Если вы выполняете эту проверку в форме onSumbit handler, вам необходимо preventDefault перед отправкой запроса.
Это фрагмент (реакция), который работает:
class LoginComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
email: '',
password: '',
};
this.login = this.login.bind(this);
this.handleLoginChange = this.handleLoginChange.bind(this);
this.handlePasswordChange = this.handlePasswordChange.bind(this);
}
handleLoginChange(event) {
this.setState({
email: event.target.value,
password: this.state.password,
});
}
handlePasswordChange(event) {
this.setState({
email: this.state.email,
password: event.target.value,
});
}
login(event) {
event.preventDefault();
firebase.auth()
.signInWithEmailAndPassword(this.state.email, this.state.password)
.then(function(user) {
window.alert('OK' user);
},
function(error) {
window.alert('ERR' error);
});
}
render() {
return (
<form onSubmit={this.login}>
<TextField hintText="login" value={this.state.email} onChange={this.handleLoginChange} /><br/>
<TextField hintText="password" type="password" value={this.state.password} onChange={this.handlePasswordChange} /><br/>
<RaisedButton type="submit" label="Login" primary={true} />
</form>
)
}
}
Ответ №7:
- Причина проста! Проверьте, есть ли у устройства подключение к Интернету.
- если у вас включены службы Google
- настройки времени телефона
- файл firebase json неверен. не удается получить идентификатор клиента, идентификатор приложения Google или ключ api
Комментарии:
1. Спасибо за это. Моя проблема заключалась в том, что физическое устройство, с которым я тестировал, не было подключено к Интернету.
Ответ №8:
Я решаю проблему, исправляя дату моего мобильного телефона с опозданием на один год, когда я установил дату, все снова работало хорошо, и ошибка исчезла, я помогу вам
Ответ №9:
Проверьте свои перезаписи firebase.json
, убедитесь, что вы не переписали URL-адрес поставщика авторизации /__/
{
"database": {
"rules": "database.rules.json"
},
"storage": {
"rules": "storage.rules"
},
"hosting": {
"public": "public",
"rewrites": [
{
"source": "!/__/**",
"destination": "/index.html"
},
{
"source": "**/!(*.js|*.html|*.css|*.json|*.svg|*.png|*.jpg|*.jpeg)",
"destination": "/index.html"
}
]
}
}
Также это может быть проблемой работника службы. См. https://github.com/Polymer/polymer-cli/issues/290
Ответ №10:
В моем случае проблема связана с несоответствием версий зависимостей, затем я изменил зависимости, как показано ниже
implementation 'com.google.firebase:firebase-auth: '
implementation 'com.google.firebase:firebase-core: '
implementation 'com.google.android.gms:play-services-auth: '
implementation 'com.firebaseui:firebase-ui-auth: '
затем он начал работать отлично.
Ответ №11:
Также может произойти, если ваш authDomain
неправильно установлен в ваших ключах firebase для веб-проектов.
Ответ №12:
У меня была аналогичная проблема с доступом к firebase. В моем случае проблема заключалась в том, что я делал это на реальном устройстве через отладчик. Как только я запустил код «нормально», ошибка исчезла. Таким образом, может быть полезно проверить, не мешает ли отладчик.
Ответ №13:
Если вы используете Genymotion, возможно, вы не активировали открытые Gapps (в правом верхнем углу)
Ответ №14:
Я также получил ту же ошибку, и иногда есть очень маленькие вещи, о которых мы забываем, например, -> Включить Интернет как
com.google.firebase.FirebaseNetworkException: A network error (such as timeout, interrupted connection or unreachable host) has occurred
Это исключение FirebaseNetwordException
может быть случай, когда хост недоступен, как указано выше, поэтому проверьте подключение
также проверьте, указали ли вы разрешения на доступ в Интернет в манифесте или нет.
надеюсь, это решит вашу проблему
Ответ №15:
Это может быть миллион вещей, мой совет, основанный на моем опыте, — проверить журналы firebase и решить проблему оттуда.
В моем случае я успешно достиг конечной точки, но она генерировала ошибку catch из-за недопустимой переменной rowsCompany в res.json({…ответ …} )
Комментарии:
1. как просмотреть эти журналы?
Ответ №16:
Я столкнулся с этой проблемой после долгих поисков, я получил решение, в моем случае это происходило из-за ограничения фоновых данных.
Если вы отключите фоновые данные Google Service Framework. Проверьте и включите его. Это сработало для меня.
I’m using flutter, and everything was working fine except today. Now, whenever I try to log in, I get this error: Network error (such as timeout, interrupted connection or unreachable host) has occurred from FIREBASE on my iOS Simulator.
And this is the error thrown in my console :
Challenge SecTrustResultType 5 for www.googleapis.com, properties: (
{
type = error;
value = "Root certificate is not trusted.";
}
)
Cancelling authentication challenge for https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
"LocalDataTask <59EA3048-54FD-41F4-87FF-4919A55A9E06>.<1>"
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <59EA3048-54FD-41F4-87FF-4919A55A9E06>.<1>, NSLocalizedDescription=cancelled} [-999]
I have tried everything, googled everything but this is very weird. Since the code was working before, but not working on my system. I guess there is some issues with my simulator. Checked the date of my simulator, it is fine.
This is my login code :
final AuthCredential credential = EmailAuthProvider.getCredential(email: this.email.text, password: this.password.text);
this._auth.signInWithCredential(credential).then((user) async {
this.gotoHome(context);
}, onError: (e){
Helpers.showError(context, (e as PlatformException).message);
});
Flutter Doctor Report:
[✓] Flutter (Channel master, v1.5.9-pre.194, on Mac OS X 10.14.5 18F132, locale en-US)
• Flutter version 1.5.9-pre.194 at /Users/alok/flutter
• Framework revision 3436e165c8 (6 weeks ago), 2019-05-09 10:37:34 -0700
• Engine revision 644db5a49c
• Dart version 2.3.1 (build 2.3.1-dev.0.0 a0290f823c)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
• Android SDK at /Users/alok/Library/Android/sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-28, build-tools 28.0.3
• Java binary at: /Applications/Android
Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
• All Android licenses accepted.
[✓] iOS toolchain - develop for iOS devices (Xcode 10.0)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 10.0, Build version 10A255
• ios-deploy 1.9.4
• CocoaPods version 1.6.0
[!] Android Studio (version 3.4)
• Android Studio at /Applications/Android Studio.app/Contents
✗ Flutter plugin not installed; this adds Flutter specific functionality.
Aloks-MacBook-Air:newmonkapp alok$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel master, v1.5.9-pre.194, on Mac OS X 10.14.5 18F132, locale en-US)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.0)
[!] Android Studio (version 3.4)
✗ Flutter plugin not installed; this adds Flutter specific functionality.
✗ Dart plugin not installed; this adds Dart specific functionality.
[✓] Connected device (1 available)
! Doctor found issues in 1 category.
Also came across with this error included with the above error:
Encounter network error. Code, error: -999, Error Domain=NSURLErrorDomain Code=-999 «cancelled» UserInfo={NSErrorFailingURLStringKey=https://play.googleapis.com/log, NSErrorFailingURLKey=https://play.googleapis.com/log, _NSURLErrorRelatedURLSessionTaskErrorKey=(
«LocalUploadTask .<1>»
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalUploadTask .<1>, NSLocalizedDescription=cancelled}
5.16.0 — [GULNetwork][I-NET901017] Encounter network error. Code, error: -999, Error Domain=NSURLErrorDomain Code=-999 «cancelled» UserInfo={NSErrorFailingURLStringKey=https://play.googleapis.com/log, NSErrorFailingURLKey=https://play.googleapis.com/log, _NSURLErrorRelatedURLSessionTaskErrorKey=(
«LocalUploadTask .<1>»
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalUploadTask .<1>, NSLocalizedDescription=cancelled}
5.16.0 — [Firebase/Core][I-COR000020] Error posting to Clearcut: Error Domain=NSURLErrorDomain Code=-999 «cancelled» UserInfo={NSErrorFailingURLStringKey=https://play.googleapis.com/log, NSErrorFailingURLKey=https://play.googleapis.com/log, _NSURLErrorRelatedURLSessionTaskErrorKey=(
«LocalUploadTask .<1>»
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalUploadTask .<1>, NSLocalizedDescription=cancelled}, with Status Code: 0
I’m using flutter, and everything was working fine except today. Now, whenever I try to log in, I get this error: Network error (such as timeout, interrupted connection or unreachable host) has occurred from FIREBASE on my iOS Simulator.
And this is the error thrown in my console :
Challenge SecTrustResultType 5 for www.googleapis.com, properties: (
{
type = error;
value = "Root certificate is not trusted.";
}
)
Cancelling authentication challenge for https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
"LocalDataTask <59EA3048-54FD-41F4-87FF-4919A55A9E06>.<1>"
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <59EA3048-54FD-41F4-87FF-4919A55A9E06>.<1>, NSLocalizedDescription=cancelled} [-999]
I have tried everything, googled everything but this is very weird. Since the code was working before, but not working on my system. I guess there is some issues with my simulator. Checked the date of my simulator, it is fine.
This is my login code :
final AuthCredential credential = EmailAuthProvider.getCredential(email: this.email.text, password: this.password.text);
this._auth.signInWithCredential(credential).then((user) async {
this.gotoHome(context);
}, onError: (e){
Helpers.showError(context, (e as PlatformException).message);
});
Flutter Doctor Report:
[✓] Flutter (Channel master, v1.5.9-pre.194, on Mac OS X 10.14.5 18F132, locale en-US)
• Flutter version 1.5.9-pre.194 at /Users/alok/flutter
• Framework revision 3436e165c8 (6 weeks ago), 2019-05-09 10:37:34 -0700
• Engine revision 644db5a49c
• Dart version 2.3.1 (build 2.3.1-dev.0.0 a0290f823c)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
• Android SDK at /Users/alok/Library/Android/sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-28, build-tools 28.0.3
• Java binary at: /Applications/Android
Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
• All Android licenses accepted.
[✓] iOS toolchain - develop for iOS devices (Xcode 10.0)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 10.0, Build version 10A255
• ios-deploy 1.9.4
• CocoaPods version 1.6.0
[!] Android Studio (version 3.4)
• Android Studio at /Applications/Android Studio.app/Contents
✗ Flutter plugin not installed; this adds Flutter specific functionality.
Aloks-MacBook-Air:newmonkapp alok$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel master, v1.5.9-pre.194, on Mac OS X 10.14.5 18F132, locale en-US)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.0)
[!] Android Studio (version 3.4)
✗ Flutter plugin not installed; this adds Flutter specific functionality.
✗ Dart plugin not installed; this adds Dart specific functionality.
[✓] Connected device (1 available)
! Doctor found issues in 1 category.
Also came across with this error included with the above error:
Encounter network error. Code, error: -999, Error Domain=NSURLErrorDomain Code=-999 «cancelled» UserInfo={NSErrorFailingURLStringKey=https://play.googleapis.com/log, NSErrorFailingURLKey=https://play.googleapis.com/log, _NSURLErrorRelatedURLSessionTaskErrorKey=(
«LocalUploadTask .<1>»
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalUploadTask .<1>, NSLocalizedDescription=cancelled}
5.16.0 — [GULNetwork][I-NET901017] Encounter network error. Code, error: -999, Error Domain=NSURLErrorDomain Code=-999 «cancelled» UserInfo={NSErrorFailingURLStringKey=https://play.googleapis.com/log, NSErrorFailingURLKey=https://play.googleapis.com/log, _NSURLErrorRelatedURLSessionTaskErrorKey=(
«LocalUploadTask .<1>»
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalUploadTask .<1>, NSLocalizedDescription=cancelled}
5.16.0 — [Firebase/Core][I-COR000020] Error posting to Clearcut: Error Domain=NSURLErrorDomain Code=-999 «cancelled» UserInfo={NSErrorFailingURLStringKey=https://play.googleapis.com/log, NSErrorFailingURLKey=https://play.googleapis.com/log, _NSURLErrorRelatedURLSessionTaskErrorKey=(
«LocalUploadTask .<1>»
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalUploadTask .<1>, NSLocalizedDescription=cancelled}, with Status Code: 0