我需要通过使用Firebase处理角色读取实时数据库中的值来执行segue。
我正在使用Firebase制作iOS应用。我使用电子邮件/密码方法通过Firebase Auth进行了身份验证。我的应用程序有2个segue:第一个叫做“ inicio”,另一个叫“ inicio2”。在实时数据库中,我使用电子邮件,用户ID和名为“ isAdmin”的布尔属性来保存用户。问题是我需要根据“ isAdmin”值在登录过程中执行segue。 if isAdmin == false
,我需要执行segue'inicio'; if isAdmin == true
,我需要执行segue'inicio2'。这是我正在尝试的代码:
import UIKit
import FirebaseAuth
import FirebaseDatabase
class InicioSesionViewController: UIViewController {
@IBOutlet weak var correo: UITextField!
@IBOutlet weak var password: UITextField!
var ref: DatabaseReference!
override func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference()
correo.text = ""
password.text = ""
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: Selector(("ocultarTeclado")))
view.addGestureRecognizer(tap)
}
//MARK: ViewDidAppear().
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
correo.text = ""
password.text = ""
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
sesionActiva()
}
@IBAction func ingresar(_ sender: UIButton) {
if correo.text != "" && password.text != "" {
guard let email = correo.text else { return }
guard let contraseña = password.text else { return }
inicioSesion(correo: email, pass: contraseña)
} else {
let alerta = UIAlertController(title: "Atención", message: "Ingrese correo electrónico y contraseña.", preferredStyle: .alert)
let aceptar = UIAlertAction(title: "Aceptar", style: .default, handler: nil)
alerta.addAction(aceptar)
present(alerta, animated: true, completion: nil)
}
}
func inicioSesion(correo: String, pass: String){
Auth.auth().signIn(withEmail: correo, password: pass){ (user, error) in
if user != nil {
self.ref.child("users").childByAutoId().observe(DataEventType.value) { (snapshot) in
let value = snapshot.value as? NSDictionary
let admin = value?["isAdmin"] as? Bool
if admin == false {
self.performSegue(withIdentifier: "inicio", sender: self)
print("Entró")
} else {
self.performSegue(withIdentifier: "inicio2", sender: self)
print("Entró")
}
}
} else {
if let error = error?.localizedDescription {
print("Error en Firebase", error)
} else {
print("Error en el código")
}
let alerta = UIAlertController(title: "Atención", message: "Se produjo un error al iniciar sesión. Verifique que el correo electrónico y la contraseña sean correctas.", preferredStyle: .alert)
let aceptar = UIAlertAction(title: "Aceptar", style: .default, handler: nil)
alerta.addAction(aceptar)
self.present(alerta, animated: true, completion: nil)
}
}
}
//Función para ocultar teclado en cualquier parte de la vista.
@objc func ocultarTeclado(){
self.view.endEditing(true)
}
//Comprueba si la sesion estaba iniciada.
func sesionActiva(){
Auth.auth().addStateDidChangeListener { (auth, error) in
if error == nil {
print("No estamos logueados")
} else {
print("Si estamos logueados")
self.performSegue(withIdentifier: "inicio", sender: self)
}
}
}
}
实际上,仅执行“ inicio” segue。