在 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 中退出应用程序后如何保持用户会话的主要内容,如果未能解决你的问题,请参考以下文章