firebase - 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);
});
}
}
- 处理链接方法
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(() {});
}
- 主要方法(初始化firebase)
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
注意: - Deeplink 在颤振中对我来说还是一个新概念,所以我在 firebase 中随机设置了它。我的注册页面有一个 WidgetsBindingObserver 来帮助恢复应用程序生命周期状态。我的注册和登录代码位于电子邮件小部件中,并且我没有使用表单来验证我的文本字段。
解决方案
似乎在您使用电子邮件链接登录后,在检查 auth.SigninWithEMailLink() 之前未更新 firebase 实例,您需要像这样在 firebase 实例中更新它
var user= await auth.currentUser();
await user.reload();
user=await auth.currentUser();
如果您仍然遇到问题,请提供更多代码让我正确理解您的问题
推荐阅读
- android - 当数据准备好时,FragmentPagerAdapter 将对象列表传递给片段
- c - 在 C 中打开文件以进行读取
- java - java : 使用缓冲输入流是否使输入流到字节 [] 的转换更有效?
- powershell - Robocopy 文件到随机命名文件夹
- ios - 自定义重置根 ViewController segue 不显示正确的导航栏标题和按钮
- excel - 在预定义的位置创建数据透视表
- xslt - 如何使用 XSLT 在 toc.ncx 中添加 playOrder?
- reactjs - Recaptcha 缺少必需的参数:sitekey
- javascript - 在最终形式重新初始化时保留脏表单值
- typescript - 如何遍历firebase中的子记录?