Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flatter Firebase Auth:发生网络错误(例如超时、连接中断或无法访问主机)_Firebase_Flutter_Dart_Firebase Authentication - Fatal编程技术网

Flatter Firebase Auth:发生网络错误(例如超时、连接中断或无法访问主机)

Flatter Firebase Auth:发生网络错误(例如超时、连接中断或无法访问主机),firebase,flutter,dart,firebase-authentication,Firebase,Flutter,Dart,Firebase Authentication,我正在尝试使用firebase\u auth在flifter上集成身份验证 但是,每当我调用verifyPhoneNumber(“+256xxxxxxxxx”)时,我都会收到错误消息出现网络错误(例如超时、连接中断或无法访问主机)。,即来自PhoneVerificationFailed回调的错误。由于这个原因,一个用户无法收到短信 我试过了 将网络权限添加到我的文件中,如下所示(我的internet连接正常,因为我可以通过仿真器进行谷歌搜索) 检查API密钥的有效性 我完全搞不懂为什么弗利

我正在尝试使用
firebase\u auth
在flifter上集成身份验证

但是,每当我调用
verifyPhoneNumber(“+256xxxxxxxxx”)
时,我都会收到错误消息
出现网络错误(例如超时、连接中断或无法访问主机)。
,即来自
PhoneVerificationFailed
回调的错误。由于这个原因,一个用户无法收到短信

我试过了

  • 将网络权限添加到我的文件中,如下所示(我的internet连接正常,因为我可以通过仿真器进行谷歌搜索)

  • 检查API密钥的有效性

  • 我完全搞不懂为什么弗利特无法与firebase通信。我有两个问题

  • 如何消除此错误
  • 除了缺少internet连接之外,还有哪些情况可能导致此错误
  • 我的建议如下

    import 'package:firebase_auth/firebase_auth.dart';
    
    FirebaseAuth auth = FirebaseAuth.instance;
    
    var message;
    // fire this when Phone verification is completed
     final PhoneVerificationCompleted verificationCompleted =
          (AuthCredential phoneAuthCredential) {
        auth.signInWithCredential(phoneAuthCredential);
    
        message = 'Received phone auth credential: $phoneAuthCredential';
        print(message);
      };
    
    // fire this when Phone verification fails
      final PhoneVerificationFailed verificationFailed =
          (AuthException authException) {
        message =
            'Phone verification failed. Code: ${authException.code}. Message: ${authException.message}';
        print(message);
      };
    
      // fire this when SMS code is sent is sent.
      final PhoneCodeSent codeSent =
          (String verificationId, [int forceResendingToken]) async {
        verificationId = verificationId;
        print('Sent verification code');
      };
    
    
      // fire this when smsCode expires
      final PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout =
          (String verificationId) {
        verificationId = verificationId;
        print('Auto retrival time-out');
      };
    
    // verify phone number
    verifyPhoneNumber(String phoneNumber) {
      auth.verifyPhoneNumber(
          phoneNumber: phoneNumber,
          timeout: const Duration(seconds: 30),
          verificationCompleted: verificationCompleted,
          verificationFailed: verificationFailed,
          codeSent: codeSent,
          codeAutoRetrievalTimeout: codeAutoRetrievalTimeout);
          print('Verification Initiated');
    }
    
    // sign in with phone.
    signInWithPhoneNumber(String smsCode, String verificationId) async {
      final AuthCredential credential = PhoneAuthProvider.getCredential(
        verificationId: verificationId,
        smsCode: smsCode,
      );
    
      final FirebaseUser user = (await auth.signInWithCredential(credential)).user;
      final FirebaseUser currentUser = await auth.currentUser();
    
      assert(user.uid == currentUser.uid);
    
      if (user != null) {
        message = 'Successfully signed in, uid: ' + user.uid;
      } else {
        message = 'Sign in failed';
      }
    }
    
    import'包:badam/varify.dart';
    进口“包装:颤振/材料.省道”;
    导入“包:firebase_auth/firebase_auth.dart”;
    导入“dart:async”;
    导入“HomePage.dart”;
    void main()=>runApp(MyApp());
    类MyApp扩展了无状态小部件{
    @凌驾
    小部件构建(构建上下文){
    返回材料PP(
    debugShowCheckedModeBanner:false,
    标题:“FireBase演示”,
    主题:主题数据(
    主样本:颜色。蓝色,
    ),
    主页:新登录页(),
    路线:{
    “/loginpage”:(BuildContext上下文)=>Dash(),
    “/landpage”:(BuildContext上下文)=>LoginPage(),
    }
    );
    }
    }
    类LoginPage扩展StatefulWidget{
    @凌驾
    _LoginPagentate createState()=>_LoginPagentate();
    }
    类_loginpagentate扩展状态{
    字符串phoneNo、smsId、verificationId;
    Future verifyPhone()异步{
    最终PhoneCodeAutoRetrievalTimeout autoRetrieve=(字符串verId){
    this.verificationId=verId;
    };
    final PhoneCodeSent smsCodeSent=(字符串verId,[int forceCodeResend]){
    this.verificationId=verId;
    smsCodeDialoge(上下文)。然后((值){
    打印(“登录”);
    });
    };
    最终电话验证完成验证成功=(AuthCredential auth){
    打印(“已验证”);
    };
    最终电话验证失败verifyFailed=(验证异常e){
    打印(“${e.message}”);
    };
    等待FirebaseAuth.instance.verifyPhoneNumber(
    电话号码:phoneNo,
    超时:常量持续时间(秒数:5),
    验证完成:验证成功,
    验证失败:验证失败,
    代码发送:smsCodeSent,
    codeAutoRetrievalTimeout:autoRetrieve,
    );
    }
    未来smsCodeDialoge(构建上下文){
    返回showDialog(上下文:上下文,
    禁止:错误,
    生成器:(BuildContext上下文){
    返回新警报对话框(
    标题:文本(“输入OTP”),
    内容:TextField(
    一旦更改:(值){
    this.smsId=值;
    },
    ),
    contentPadding:EdgeInsets.all(10.0),
    行动:[
    新扁平按钮(
    已按下:(){
    FirebaseAuth.instance.currentUser().then((用户){
    如果(用户!=null){
    Navigator.of(context.pop();
    导航器。推(
    上下文
    MaterialPage路线(生成器:(上下文)=>Dash()),
    );
    }
    否则{
    Navigator.of(context.pop();
    签名(smsId);
    }
    }
    );
    },
    子项:文本('Done',style:TextStyle(颜色:Colors.blue),)
    ],
    );
    },
    );
    }
    未来登录(字符串smsCode)异步{
    最终AuthCredential凭据=PhoneAuthProvider.getCredential(
    验证ID:verificationId,
    smsCode:smsCode,
    );
    等待FirebaseAuth.instance.signInWithCredential(凭证)
    .然后((用户){
    Navigator.of(context.pushReplacementNamed('/loginpage');
    }).catchError((e){
    印刷品(e);
    });
    }
    @凌驾
    小部件构建(构建上下文){
    返回脚手架(
    appBar:appBar(
    标题:文本(“登录”)
    ),
    正文:专栏(
    mainAxisAlignment:mainAxisAlignment.center,
    儿童:[
    Text('Phone Auth',style:TextStyle(字体大小:20,颜色:Colors.blue),),
    填充物(
    填充:常数边集全部(16.0),
    孩子:TextField(
    装饰:输入装饰(
    hintText:'输入您的电话号码',
    ),
    一旦更改:(值){
    this.phoneNo=值;
    },
    ),
    ),
    尺寸箱(高度:10.0),
    升起的按钮(
    按下:verifyPhone,
    子项:文本('Verify',样式:TextStyle(颜色:Colors.white),),
    标高:7.0,
    颜色:颜色,蓝色,
    )
    ],
    ),
    );
    }
    }
    

    这对我来说很有效,我希望能帮助你

    在我的情况下,是我的VPN造成了这个问题。禁用VPN并再次测试解决了此错误。我希望这能有所帮助。

    在我的例子中,我解决了在Xcode的Runner.xcworkspace上允许传出连接的问题


    谢谢,在Flatter for Desktop(macos)版本中,默认情况下未选中传出连接。
    import 'package:badam/varify.dart';
    import 'package:flutter/material.dart';
    import 'package:firebase_auth/firebase_auth.dart';
    import 'dart:async';
    
    import 'HomePage.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          debugShowCheckedModeBanner: false,
          title: 'FireBase Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: new LoginPage(),
          routes: <String, WidgetBuilder>{
            '/loginpage' : (BuildContext context) => Dash(),
            '/landpage' : (BuildContext context) => LoginPage(),
        }
        );
      }
    }
    class LoginPage extends StatefulWidget {
      @override
      _LoginPageState createState() => _LoginPageState();
    }
    
    class _LoginPageState extends State<LoginPage> {
      String phoneNo, smsId, verificationId;
    
      Future<void> verifyPhone() async{
        final PhoneCodeAutoRetrievalTimeout autoRetrieve = (String verId){
          this.verificationId = verId;
        };
        final PhoneCodeSent smsCodeSent = (String verId, [int forceCodeResend]){
          this.verificationId = verId;
          smsCodeDialoge(context).then((value){
            print('Signed In');
          });
        };
        final PhoneVerificationCompleted verifiedSuccess = (AuthCredential auth){
          print('verified');
        };
        final PhoneVerificationFailed verifyFailed = (AuthException e) {
          print('${e.message}');
        };
        await FirebaseAuth.instance.verifyPhoneNumber(
          phoneNumber: phoneNo,
          timeout: const Duration(seconds: 5),
          verificationCompleted: verifiedSuccess,
          verificationFailed: verifyFailed,
          codeSent: smsCodeSent,
          codeAutoRetrievalTimeout: autoRetrieve,
        );
      }
      Future<bool> smsCodeDialoge(BuildContext context){
        return showDialog(context: context,
          barrierDismissible: false,
          builder: (BuildContext context) {
            return new AlertDialog(
              title: Text('Enter OTP'),
              content: TextField(
                onChanged: (value)  {
                  this.smsId  = value;
                },
              ),
              contentPadding: EdgeInsets.all(10.0),
              actions: <Widget>[
                new FlatButton(
                    onPressed: (){
                      FirebaseAuth.instance.currentUser().then((user){
                        if(user != null){
                          Navigator.of(context).pop();
                          Navigator.push(
                            context,
                            MaterialPageRoute(builder: (context) => Dash()),
                          );
    
                        }
                        else{
                          Navigator.of(context).pop();
                          signIn(smsId);
                        }
    
                      }
                      );
                    },
                    child: Text('Done', style: TextStyle( color: Colors.blue),))
              ],
            );
          },
        );
      }
    
      Future<void> signIn(String smsCode) async {
        final AuthCredential credential = PhoneAuthProvider.getCredential(
          verificationId: verificationId,
          smsCode: smsCode,
        );
         await FirebaseAuth.instance.signInWithCredential(credential)
            .then((user){
          Navigator.of(context).pushReplacementNamed('/loginpage');
        }).catchError((e){
          print(e);
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
              title: Text('Sign In')
          ),
          body: Column(
            mainAxisAlignment: MainAxisAlignment.center,
    
            children: <Widget>[
              Text('Phone Auth',style: TextStyle(fontSize: 20,color: Colors.blue),),
              Padding(
                padding: const EdgeInsets.all(16.0),
                child: TextField(
                  decoration: InputDecoration(
                    hintText: 'Enter your phone number',
                  ),
                  onChanged: (value){
                    this.phoneNo = value;
                  },
                ),
              ),
              SizedBox(height: 10.0),
              RaisedButton(
                onPressed: verifyPhone,
                child: Text('Verify', style: TextStyle(color: Colors.white),),
                elevation: 7.0,
                color: Colors.blue,
    
              )
            ],
          ),
        );
      }
    }