Flutter Web和Firebase身份验证:如何重定向未在Flutter Web中登录的用户?

时间:2020-09-08 22:31:22

标签: firebase flutter firebase-authentication flutter-web

我正在使用Flutter Web和Firebase开发一个Web应用程序。

我必须处理Firebase登录。

假设我们有两个屏幕,我要实现的情况如下:

如果用户未登录:

  • 在登录页面上重定向用户

如果用户未登录:

  • 如果他登陆登录页面,请在首页上重定向他

我已经实现了一个功能,该功能可以检查Firebase中的当前用户,并执行以下操作:

void checkAuthentication() {
var url = window.location.href;

var navigationService = locator<NavigationService>();

var loggedIn = this.isUserLoggedIn();
if (!loggedIn) {
  navigationService.replaceWith(Routes.login);
} else {
  if (url.contains("Login")) {
    navigationService.replaceWith(Routes.homepage);
  }
}

}

navigationService是我从堆叠式包装(https://pub.dev/packages/stacked)中获得的服务。

此解决方案有效,但是有两个问题:

  • 这不是执行此操作的正确方法。我不可能在每个屏幕页面上都调用它
  • 重定向后,您会看到显示新页面的过渡。

我的问题: 您将如何在Flutter Web中的代码中唯一之处进行管理? 有没有比我在此展示的方法更好的方法来实现这一区别?

1 个答案:

答案 0 :(得分:0)

如果您有时间,请查看The Net Ninja's Flutter / Firebase教程中的前几对视频,这些视频将通过基本身份验证。我对Flutter还是很陌生,所以我会尽力解释他是如何做到的,而无需进行详细介绍:

他有一个文件wrapper.dart,该文件使用自定义的User对象,该对象不断地传输身份验证状态。包装器根据身份验证状态决定用户应导航到的位置。

 Widget build(BuildContext context) {
    final user = Provider.of<User>(context);
    print(user);

    // return either home or authenticate
    if (user == null) {
      return Authenticate();
    } else {
      return Home();
    }
  }

我在项目中使用了这段代码,效果很好。