Flutter 中的 Firebase 身份验证状态检查

Posted

技术标签:

【中文标题】Flutter 中的 Firebase 身份验证状态检查【英文标题】:Firebase Auth state check in Flutter 【发布时间】:2018-09-23 12:19:04 【问题描述】:

目前我需要设置一个检查用户是否登录然后采取相应的行动(打开主页或登录屏幕)。我只使用电子邮件身份验证。

如何在flutter中检查用户firebase身份验证状态?

这个问题已经被问到here,但是我没有通过这种方式检查身份验证状态:

final auth = FirebaseAuth.instance;

class MyApp extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return new MaterialApp(
        title: 'MyApp',
        home: (_checkLogin() == true ? new PostAuthScaffold() : new PreAuthScaffold())
    );
  


bool _checkLogin() 
  return !(auth.currentUser == null);

【问题讨论】:

【参考方案1】:

您还可以在initState 中检查您的身份验证状态,如下所示:

class CheckAuth extends StatefulWidget 
  @override
  _CheckAuthState createState() => new _CheckAuthState();


class _CheckAuthState extends State<CheckAuth> 
  bool isLoggedIn;
  @override
  void initState() 
    isLoggedIn = false;
    FirebaseAuth.instance.currentUser().then((user) => user != null
        ? setState(() 
            isLoggedIn = true;
          )
        : null);
    super.initState();
    // new Future.delayed(const Duration(seconds: 2));
  

  @override
  Widget build(BuildContext context) 
    return isLoggedIn ? new Home() : new LoginScreen();
  

【讨论】:

返回“断言失败:布尔表达式不能为空”错误。我是否应该在每次用户登录或注销时手动更改 isLoggedIn 值并将该值存储在 Shared Preferences 中? 那是我忘记初始化值了,我更新了代码【参考方案2】:

怎么样

FirebaseAuth.instance.onAuthStateChanged.listen((user) 
  setState(() => isAuthenticated = user != null);
) 

【讨论】:

尝试了这种方法,也以防万一“user.email!= null”,但它似乎不起作用 - 重新打开应用程序后它仍然会返回登录页面。谢谢 "重新打开应用后仍然返回登录页面。"为什么你认为这与我发布的代码有关? 我使用 isAuthenticated 变量打开适当的页面:主页:_isAuthenticated == true ?新的 HomeScreen() :新的 LogInScreen()。这是一种错误的做法吗? 从那个代码sn-p很难说。可能是对的,但如果返回预期结果,您应该测试上面的代码。 是的,我可以成功注册并登录(感谢您对我上一个问题的回答),但是如果我在登录后关闭我的应用程序然后再次打开它 - 会弹出登录屏幕再次(而不是预期的主屏幕)

以上是关于Flutter 中的 Firebase 身份验证状态检查的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Web 中的 Firebase Phone 身份验证

Firebase 身份验证 Flutter 中的电话号码

Flutter Firebase 不保留用户身份验证

Flutter:Firebase 身份验证和 Firestore 快照流

使用 Firebase 身份验证的 Flutter 应用程序中的 Google sign_in_failed 错误

Flutter Firebase 电话身份验证不起作用