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 问题

Firebase 托管:检测 facebook、twitter 和 google 等社交媒体爬虫机器人

Facebook 登录用户数据未显示在 Firebase 控制台中