首页 > 解决方案 > firebase 无密码身份验证如何与颤振应用程序的动态链接一起使用?

问题描述

当我单击电子邮件中的验证链接时,它会打开我在后台运行的应用程序,但 didChangeAppLifecycleState 方法将数据返回为 null 和 deepLink 设置在 firebase 而不是我电子邮件中的整个 emailLink,导致 SignInWithEmailAndLink 失败,因为它应该匹配电子邮件从收到的链接在小部件中输入的地址。

这是从这篇文章https://medium.com/firebase-developers/dive-into-firebase-auth-on-flutter-email-and-link-sign-in-e51603eb08f8中获取的代码:-

1.didChangeAppLifecycleState 方法

@override
void didChangeAppLifecycleState(AppLifecycleState state) async {
  if (state == AppLifecycleState.resumed) {
    final PendingDynamicLinkData data =
    await FirebaseDynamicLinks.instance.getInitialLink();
    if( data?.link != null ) {
      handleLink(data?.link);
    }
    FirebaseDynamicLinks.instance.onLink(
        onSuccess: (PendingDynamicLinkData dynamicLink) async {
          final Uri deepLink `enter code here`= dynamicLink?.link;
          handleLink(deepLink);
        }, onError: (OnLinkErrorException e) async {
      print('onLinkError');
      print(e.message);
    });
  }
}
  1. 处理链接方法
void handleLink(Uri link) async {
  if (link != null) {
    final User user = (await _auth.signInWithEmailAndLink(
      email: _userEmail,
      link: link.toString(),
    ))
        .user;
    if (user != null) {
      setState(() {
        _userID = user.uid;
        _success = true;
    });
    } else {
    setState(() {
        _success = false;
      });
    }
  } else {
    setState(() {
      _success = false;
    });
  }
  setState(() {});
}
  1. 主要方法(初始化firebase)
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

注意: - Deeplink 在颤振中对我来说还是一个新概念,所以我在 firebase 中随机设置了它。我的注册页面有一个 WidgetsBindingObserver 来帮助恢复应用程序生命周期状态。我的注册和登录代码位于电子邮件小部件中,并且我没有使用表单来验证我的文本字段。

标签: firebaseflutterfirebase-authentication

解决方案


似乎在您使用电子邮件链接登录后,在检查 auth.SigninWithEMailLink() 之前未更新 firebase 实例,您需要像这样在 firebase 实例中更新它

  var user= await auth.currentUser();
              await user.reload();
              user=await auth.currentUser();

如果您仍然遇到问题,请提供更多代码让我正确理解您的问题


推荐阅读