在 Firebase 中退出应用程序后如何保持用户会话

Posted

技术标签:

【中文标题】在 Firebase 中退出应用程序后如何保持用户会话【英文标题】:How to maintain user session after exiting app in Firebase 【发布时间】:2016-09-28 22:09:13 【问题描述】:

我有一个使用 Firebase 作为后端的应用。我的应用使用简单的电子邮件和密码登录实现 Firebase-Authentication API 进行身份验证。

除了一个问题,一切都很好。即使在用户关闭应用程序后,我也想保持用户会话。

FIRAuth.auth()?.currentUser?具有当前用户的所有用户属性(例如:uid、电子邮件、令牌等...),效果很好。我注意到的问题是 FIRAuth.auth()?.currentUser?不是持久的。所以退出应用重新启动后,返回null。

我不想在用户每次打开应用重新登录时都询问他们。有没有办法解决这个问题?

【问题讨论】:

Firebase 自动将用户令牌保留在 ios 钥匙串中。应用程序重新启动时会自动恢复。您可以使用addAuthStateDidChangeListener 对此进行监控(请参阅Firebase Authentcation documentation)。如果这不是问题,请发布minimum complete code that reproduces the problem。 【参考方案1】:

Firebase 应该已经通过应用启动跟踪您的用户。

您的问题可能在于直接使用 FIRAuth.auth()?.currentUser? 而不是推荐的方法。

获取当前用户的推荐方法是设置监听器 在 Auth 对象上:

FIRAuth.auth()?.addStateDidChangeListener  auth, user in
  if let user = user 
    // User is signed in.
   else 
    // No user is signed in.
  

通过使用侦听器,您可以确保 Auth 对象不在 中间状态——比如初始化——当你得到当前 用户。

在我自己的应用程序中,我同时使用两者。如果第一种方法不存在用户,则转到第二种方法,如果失败,则显示登录/注册屏幕。

【讨论】:

啊!我刚刚尝试过这种方法,你是绝对正确的。我想我一定是错过了什么。非常感谢您的回复。 我应该把这个条件放在哪里?如果不在登录视图控制器中? 随心所欲。您需要获取当前用户的任何地方。我个人将所有这些代码包装在我自己的类中。【参考方案2】:

FirAuth 已重命名为 Auth

请使用最新的 Firebase pod

【讨论】:

以上是关于在 Firebase 中退出应用程序后如何保持用户会话的主要内容,如果未能解决你的问题,请参考以下文章

如何在Firebase中退出应用后维护用户会话

在 React.JS 中刷新后,如何让用户保持登录到 firebase?

刷新后如何让用户保持登录到 Firebase 应用程序?

如何使用 Firebase 刷新令牌保持用户身份验证?

如何让用户在 Firebase 中退出?

在 Flutter Web 中长时间使用 Firebase 后退出