Flutter Firebase 身份验证模拟器启用

Flutter Firebase Authentication emulator enabling

我正在尝试挂钩 Firebase Authentication emulator to my Flutter mobile project to perform some local testing. Unfortunately it seems it is not possible to do with the FlutterFire plugin

启用 Firestore or Cloud Functions 模拟器没有任何问题,但我找不到身份验证的方法。

是否有人有想法或最佳做法可以遵循?

看来连接到 Authentication 模拟器的方法还没有进入 FlutterFire 库。

在 Github 存储库中记录了一个问题,因此您可以关注其状态 there

更新:看起来现在 landedfirebase_auth 包的 0.20 版(及更高版本)中。语法应该是这样的:

FirebaseAuth.instance.useEmulator('http://localhost:9099');

Firebase 模拟器支持连接到网络应用程序。 *作为解决方法,您可以使用 flutter 的测试版将您的移动应用程序转换为网络应用程序,并在您的浏览器中对其进行测试。您必须在 index.html 文件中明确添加对 firebase 服务的支持。 参见:-

https://flutter.dev/web

https://flutter.dev/docs/get-started/web

它现在可以在最新的稳定版本 (^0.20.1) 中使用。

要使用它,请调用 FirebaseAuth.instance.useEmulator('http://localhost:9099')
必须在访问任何身份验证方法之前调用它。

配置 flutter 应用以在本地模拟器中使用 firebase 身份验证。

第一个:

在身份验证函数调用之前添加以下行之一,看看哪一个对我有用环回 IP 有效:

 firebaseAuth.useAuthEmulator('127.0.0.1',9099);
 //firebaseAuth.useAuthEmulator('http://localhost',9099);

样本:

 Future<LocalUser?> signInAnonymously({required BuildContext context}) async {
    firebaseAuth.useAuthEmulator('127.0.0.1',9099);
    //firebaseAuth.useAuthEmulator('http://localhost',9099);

    UserCredential userCredential = await firebaseAuth.signInAnonymously();
    return LocalUser(user: userCredential.user);
  }

如果出现网络错误,请执行以下操作。

第二-1:对于Android.

AndroidManifest.xml路径中添加android:usesCleartextTraffic="true"android/app/src/main/AndroidManifest.xml.

 <application
    android:usesCleartextTraffic="true"      //<========
    android:name="io.flutter.app.FlutterApplication"
    android:label="firebaseauthexample"
    android:icon="@mipmap/ic_launcher">

第二-2:对于IOS.

在此处添加以下代码ios/Runner/Info.plist

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

"localhost" 可能更容易使用,如下所示:

Flutter 已将 useEmulator 更新为 useAuthEmulator。要使用本地身份验证模拟器,您可以通过传递 Firebase 模拟器端口和“localhost”关键字来使用 useAuthEmulator 方法,如下所示:

await FirebaseAuth.instance.useAuthEmulator('localhost', 9099);

请务必在@frank-van-puffelen之前提到的所有身份验证方法之前通过此行。