Firebase Facebook 登录 - 检测用户登录状态并重定向
Posted
技术标签:
【中文标题】Firebase Facebook 登录 - 检测用户登录状态并重定向【英文标题】:Firebase Facebook Login - Detect User login status and redirect 【发布时间】:2019-10-11 02:44:40 【问题描述】:我正在尝试为使用 Facebook 登录 SDK 的应用创建登录页面。当 RootViewController 加载时,它应该确定用户是否已经通过 Facebook 登录,如果是,则将他们引导到应用程序的主页。否则,如果他们没有通过 Facebook 登录,它应该将他们引导到登录页面登录。
我已经向 RootViewController 添加了代码来检查 currentUser 是否为 nil,但是无论用户是否通过 Facebook 登录,它似乎都会重定向到主页。
import UIKit
import FirebaseAuth
class RootNavController: UINavigationController
var handler: AuthStateDidChangeListenerHandle?
override func viewDidLoad()
super.viewDidLoad()
self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
// Do any additional setup after loading the view.
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
handler = Auth.auth().addStateDidChangeListener( (auth, user) in
self.checkLoggedInUserStatus()
)
override func viewWillDisappear(_ animated: Bool)
super.viewWillDisappear(animated)
guard let handler = handler else return
Auth.auth().removeStateDidChangeListener(handler)
fileprivate func checkLoggedInUserStatus()
DispatchQueue.main.async
if Auth.auth().currentUser == nil
let controller = WelcomeController()
let navController = UINavigationController(rootViewController: controller)
self.present(navController, animated: true, completion: nil)
return
else
self.performSegue(withIdentifier: "UserLoggedIn", sender: nil)
return
预期结果是仅当用户已通过 Facebook 登录时才显示主页。
【问题讨论】:
【参考方案1】:除了快速更改之外,您的代码看起来还不错。只要您在再次打开应用程序之前注销用户,它就应该可以工作。请记住,Fb 登录只会为您提供在 firebase 中进行身份验证的令牌。之后,所有登录和注销都需要在 Firebase 中处理。我会像这样更改您的代码。但主要是为了简单:
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
handler = Auth.auth().addStateDidChangeListener( (auth, user) in
if user != nil
self.performSegue(withIdentifier: "UserLoggedIn", sender: nil)
else
let controller = WelcomeController()
let navController = UINavigationController(rootViewController: controller)
self.present(navController, animated: true, completion: nil)
)
如果您在 AppDelegate 中执行所有这些操作,可能会更好。这样您就不必在不需要它的情况下呈现 NavBar。相反,您可以在应用启动屏幕之后显示所需的屏幕。
【讨论】:
以上是关于Firebase Facebook 登录 - 检测用户登录状态并重定向的主要内容,如果未能解决你的问题,请参考以下文章
仅使用 Facebook 令牌在 iOS 上发送 Firebase 邀请登录 Firebase 身份验证
如何确定 Firebase 用户是不是使用 facebook 身份验证登录
如何确定 Firebase 用户是不是使用 facebook 身份验证登录
Android - 基于 facebook 的 Firebase 登录并调用 Facebook Graph Api 问题