页面授权过滤器 - Flutter Web/Firebase Auth

Posted

技术标签:

【中文标题】页面授权过滤器 - Flutter Web/Firebase Auth【英文标题】:Page authorisation filter - Flutter Web/Firebase Auth 【发布时间】:2020-11-12 17:13:00 【问题描述】:

我使用 FirebaseAuth(电子邮件/密码)作为身份验证来访问我的 Flutter 网站上的页面。我想确保在没有有效用户会话的情况下无法通过 URL 直接访问页面/小部件。

我目前正在使用以下内容,它可以工作,但它会导航后期小部件构建,这对于 Navigator 的工作来说似乎必不可少。然而,从可用性的角度来看,它看起来很糟糕,因为页面会闪烁然后返回。

在初始化状态

//Check if user is logged in
    auth.onAuthStateChanged.listen((user) 
      if (user != null) 
        print('User active');
        isLoggedIn = true;
       else 
        print('User logged out');
        isLoggedIn = false;
      
    );

在小部件构建功能中

 if (!isLoggedIn) 
      SchedulerBinding.instance.addPostFrameCallback((_) 
        Navigator.pushNamed(context, '/');
      );
    

我能想到的唯一选择是首先在每个页面上加载的“授权”小部件,检查并转发用户,但它仍然很笨重,并不能真正很好地解决我的问题。

什么是 Flutter web 中更好的页面安全方法?

【问题讨论】:

【参考方案1】:

检查包裹

universal_html

我认为它对你有用。你可以这样使用它:

读写

WebStorage.instance.sessionId;

WebStorage.instance.sessionId = 'YOUR_CREDs';

这样使用

@override
  Widget build(BuildContext context) 
    if (Web) 
      isLogin = WebStorage.instance.sessionId != null;
     else 
      isLogin = //check from local storage;
    
    return isLogin ? HomePage() : LoginPage();
  

参考 Flutter For Web Cookie/Token Sessions and Authentcation

【讨论】:

感谢您的回复,但这是我尽可能避免的。

以上是关于页面授权过滤器 - Flutter Web/Firebase Auth的主要内容,如果未能解决你的问题,请参考以下文章

授权过滤器中的错误(JEE6)

在 JSF 项目中使用授权过滤器进行自定义身份验证

Flutter中的节流与防抖(过滤重复点击)

Flutter 不提示设备进行授权对话框

Flutter 健康插件“未授予授权”

Flutter 健康插件“未授予授权”