Firebase身份验证用户界面

时间:2019-03-10 00:32:05

标签: swift firebase firebase-authentication firebaseui

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

出现了登录界面,但现在不再显示。

Google sign UI仍然可以显示并正常工作。

它看起来如下:

enter image description here

它曾经喜欢:

enter image description here

用于复制问题的代码如下:

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身份验证的工作方式,但股票标准身份验证已停止工作。

2 个答案:

答案 0 :(得分: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
            }
        })
    }

答案 1 :(得分:-1)

此问题已解决。似乎实现方式已更改。

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'