我能够找到以下内容:How to check if user has valid Auth Session Firebase iOS?,但是它无法回答我的问题。
我要做什么:我知道除非用户删除自己的帐户,否则这种情况永远不会发生,但是我是否知道用户是否还有身份验证会话?
例如,在身份验证选项卡下,即使使用了以下代码段,我也删除了测试用户创建的条目:
在AppDelegate.swift中:
if Auth.auth().currentUser == nil {
try! Auth.auth().signOut()
}
在我的主视图控制器中:
private func checkIfSignedIn() {
Auth.auth().addStateDidChangeListener { (auth, user) in
if user != nil {
// code to stay signed in
} else {
// code for dismissing the controller and moving to login controller
}
}
}
当我运行时,从Firebase控制台的“身份验证”部分清除条目,然后重新运行该应用程序,该用户仍然登录并且仍然具有有效的UID(我能够打印它进行检查)。
它唯一检测到何时应退出但又不重新登录的时间是当我手动单击“退出”按钮时。有办法解决这个问题吗?
答案 0 :(得分:1)
看看这个:https://firebase.google.com/docs/auth/ios/manage-users#re-authenticate_a_user
我不是IOS开发人员,但是从我从文档中读取的内容来看,您的代码中可能似乎缺少某些东西,并且对于WillB在How can I detect if the user was deleted from Firebase auth?所指出的Stackoverflow答案中看起来确实很熟悉。
答案 1 :(得分:0)
您没有呼叫StateDidChangeListener
。相反,您是告诉Firebase在身份验证状态更改时打电话给您,这可能在重新加载页面时发生几次。
在加载页面并且先前有用户登录时,身份验证状态可能会更改几次,而客户端正在确定用户的身份验证状态是否仍然有效。 Auth.auth().currentUser
将始终返回有效用户(如果您已经登录)。请使用它。
private func checkIfSignedIn() {
if Auth.auth().currentUser != nil {
// code to stay signed in
}else{
// redirect to sign in page
}
}
希望有帮助。
答案 2 :(得分:0)
您想用 AppDelegate 中的代码做什么?当然,如果 currentUser
是 nil
,那么您已经退出,这意味着此代码将永远不会执行任何操作?
如果这是为了测试目的,而您只是想测试listener
,那么您需要先登录才能退出,IE 在 AppDelegate 中将其更改为 if Auth.auth().currentUser != nil
。>