Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.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 Web和Firebase身份验证:如何重定向Flatter Web中未登录的用户?_Firebase_Flutter_Firebase Authentication_Flutter Web - Fatal编程技术网

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

Flatter Web和Firebase身份验证:如何重定向Flatter Web中未登录的用户?,firebase,flutter,firebase-authentication,flutter-web,Firebase,Flutter,Firebase Authentication,Flutter Web,我正在使用FlatterWeb和Firebase开发一个web应用程序 我必须处理Firebase登录 假设我们有两个屏幕,我想要实现的情况如下: void checkAuthentication() { var url = window.location.href; var navigationService = locator<NavigationService>(); var loggedIn = this.isUserLoggedIn(); if (!loggedIn)

我正在使用FlatterWeb和Firebase开发一个web应用程序

我必须处理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);
  }
}
如果用户未登录:

  • 在登录页面上重定向用户
如果用户未登录:

  • 如果他登录页面,在主页上重定向他
我已经实现了一个函数,用于检查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);
  }
}
void checkAuthentication(){
var url=window.location.href;
var navigationService=locator();
var loggedIn=this.isUserLoggedIn();
如果(!loggedIn){
navigationService.replaceWith(Routes.login);
}否则{
if(url.contains(“登录”)){
导航服务.replaceWith(Routes.homepage);
}
}
}

navigationService是我从堆叠包()中获取的服务

此解决方案可行,但存在两个问题:

  • 这不是正确的方法。我不可能在每个屏幕页面中都调用它
  • 当您被重定向时,您可以看到显示新页面的转换
我的问题: 您将如何在代码中的一个独特点中管理颤振Web?
有没有更好的方法来实现这一点?与我在这里展示的方法不同?

如果您有时间查看flifter/Firebase教程中的前几段视频,其中涉及基本身份验证。我是个新手,所以我会尽我最大的努力解释他是如何做到这一点的,而不会详细说明:

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

 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();
    }
  }
小部件构建(构建上下文){
最终用户=提供者(上下文);
打印(用户);
//返回主页或进行身份验证
if(user==null){
返回Authenticate();
}否则{
回家();
}
}

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

这段代码目前在最新版本的
firebase\u auth 0.18.0+1
上被破坏,因为它返回的是平台异常,而不是
null
-感谢您的回答。但是,这种方法仅适用于移动设备,在移动设备上,您无法通过url链接访问特定页面。在FlatterWeb中,您有这种可能性,如果用户登录或未登录,则应相应地重定向用户。