【问题标题】:Firebase Authentication UIFirebase 身份验证界面
【发布时间】:2019-07-31 16:13:10
【问题描述】:

我在 Firebase 框架中使用标准用户名和密码。

登录 UI 曾经出现,但现在不再出现。

Google 签名 UI 仍然可以正常工作。

如下所示:

以前喜欢喜欢:

复制问题的代码如下:

import UIKit
import Firebase
import FirebaseUI

class ViewController: UIViewController {

    private var handle: AuthStateDidChangeListenerHandle?
    @IBOutlet weak var userLbl: UILabel!

    @IBAction func logout(_ sender: Any) {
        let firebaseAuth = Auth.auth()
        do {
            try firebaseAuth.signOut()
        } catch let signoutError as NSError {
            debugPrint("Error signing out: \(signoutError)")
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        handle = Auth.auth().addStateDidChangeListener({ (auth, user) in
            if user == nil {

                if let authUI = FUIAuth.defaultAuthUI() {
                    authUI.delegate = self

                    let providers: [FUIAuthProvider] = [
                        FUIGoogleAuth()
                    ]
                    authUI.providers = providers

                    let authViewController = authUI.authViewController()
                    self.present(authViewController, animated: true, completion: {})
                }
            }
            else{
                self.userLbl.text = user?.displayName
            }
        })
    }
}

extension ViewController:FUIAuthDelegate{
    func authUI(_ authUI: FUIAuth, didSignInWith authDataResult: AuthDataResult?, error: Error?){
        if error != nil{
            print("Error: \(error)")
            return
        }
        self.userLbl.text = Auth.auth().currentUser?.displayName
    }
}

PODS 是:

  # Pods for FBTest
  pod 'Firebase/Core'
  pod 'Firebase/Firestore'
  pod 'FirebaseUI'

pod 版本如下:

Using Bolts (1.9.0)
Using BoringSSL-GRPC (0.0.2)
Using FBSDKCoreKit (4.40.0)
Using FBSDKLoginKit (4.40.0)
Using Firebase (5.18.0)
Using FirebaseAnalytics (5.7.0)
Using FirebaseAuth (5.4.0)
Using FirebaseAuthInterop (1.0.0)
Using FirebaseCore (5.3.1)
Using FirebaseDatabase (5.1.0)
Using FirebaseFirestore (1.0.2)
Using FirebaseInstanceID (3.7.0)
Using FirebaseStorage (3.1.0)
Using FirebaseUI (6.1.1)
Using GTMSessionFetcher (1.2.1)
Using GoogleAppMeasurement (5.7.0)
Using GoogleSignIn (4.4.0)
Using GoogleToolboxForMac (2.2.0)
Using GoogleUtilities (5.3.7)
Using Protobuf (3.7.0)
Using SDWebImage (4.4.6)
Using TwitterCore (3.2.0)
Using TwitterKit (3.4.2)
Using gRPC-C++ (0.0.6)
Using gRPC-Core (1.17.0)
Using leveldb-library (1.20)
Using nanopb (0.3.901)

很好奇 google 身份验证是如何工作的,但股票标准身份验证已经停止工作。

【问题讨论】:

    标签: swift firebase firebase-authentication firebaseui


    【解决方案1】:

    这适用于当前版本 5:

    override func viewDidLoad() {
            super.viewDidLoad()
            handle = Auth.auth().addStateDidChangeListener({ (auth, user) in
                if user == nil {
    
                    if let authUI = FUIAuth.defaultAuthUI() {
                        authUI.delegate = self
    
                        let providers: [FUIAuthProvider] = [
                            FUIEmailAuth(),
                        ]
                        authUI.providers = providers
    
                        let provider = authUI.providers.first as! FUIEmailAuth;
                        provider.signIn(withPresenting: self, email: nil);
                    }
                }
                else{
                    self.userLbl.text = user?.displayName
                }
            })
        }
    

    【讨论】:

    • 这也适用于最新版本,谢谢。我一直在寻找解决方案几个小时。我无法从谷歌找到这篇文章,所以我想添加一些关键字,以便轻松找到这篇文章。 firebase 欢迎屏幕没有电子邮件字段。 .lock 中适用的版本是 - Bolts (1.9.0): - FBSDKLoginKit (4.44.1): - FBSDKCoreKit - Firebase/Auth (5.20.2): - Firebase/CoreOnly - FirebaseAuth (= 5.4.2) - Firebase/Core (5.20.2): - Firebase/CoreOnly - FirebaseAnalytics (= 5.8.1) "Podfile.lock" 257L, 8462C
    【解决方案2】:

    这解决了它。似乎实现方式发生了变化。

    override func viewDidLoad() {
            super.viewDidLoad()
            handle = Auth.auth().addStateDidChangeListener({ (auth, user) in
                if user == nil {
    
                    if let authUI = FUIAuth.defaultAuthUI() {
                        authUI.delegate = self
                        let authViewController = authUI.authViewController()
                        self.present(authViewController, animated: true, completion: {})
                    }
                }
                else{
                    self.userLbl.text = user?.displayName
                }
            })
        }
    

    并恢复到以前的版本:

    pod 'Firebase/Core', '<5'
    pod 'Firebase/Firestore', '<5'
    pod 'FirebaseUI', '<5'
    

    【讨论】:

    • 嗯 - 否决了。大概是因为它不是一个持久的修复。仍在寻找当前版本的实现。
    猜你喜欢
    • 2018-06-04
    • 2020-05-06
    • 1970-01-01
    • 2020-04-01
    • 2022-12-10
    • 2020-11-04
    • 1970-01-01
    • 2016-09-26
    相关资源
    最近更新 更多