0

이것은 '어떻게해야합니까 ....'와 같은 일반적인 문제입니다. 내 응용 프로그램에서 사용자는 이메일과 암호로 Firebase 계정에 로그인 할 수 있으며 여러 필드가있는 데이터 입력 페이지로 이동합니다. 사용자가 이미 존재하면 해당 데이터가 편집되어 데이터베이스에 다시 저장할 수있는 필드로 다운로드됩니다.Swift 3 이메일 패스워드를 통한 Firebase 사용자 인증/데이터베이스 로그인

이 모든 것은 한 가지를 제외하고는 모두 잘 작동합니다. 테스트를하고 계정에 로그인하면 기존 데이터를 사용자로부터 다운로드합니다. 그러나 다른 사용자와 로그 아웃하고 로그인하면 이전 로그인 정보를 다운로드 (또는 표시)합니다. 사용자가 실제로 "FIRAuth.auth() ?. addStateDidChangeListener"를 사용하여 로그 아웃했는지 확인했습니다. 특정 장치에 단일 사용자가있는 경우에는 문제가되지 않지만 제대로 작동하지 않으며 해결하기가 좋지 않다는 점이 마음에 들지 않습니다. 어떤 도움을 주시면 감사하겠습니다. :-)

꽤 많은 코드가 있기 때문에 조금 줄 였지만 주요 부분은 그대로 유지했습니다. (나는 사람들이 더 많은 코드를 요구할 때 많은 도움을 얻는다. 실제로 도움을 얻으 려하지 않는 경향이있다. 내가 생각하는 평판 빌더! 매우 짜증 스럽다.)

class UserLoginViewController: UIViewController { 

@IBOutlet weak var userNameLabel: UILabel! 
@IBOutlet weak var emailField: UITextField! 
@IBOutlet weak var passwordField: UITextField! 
@IBOutlet weak var logoutButton: UIButton! 

var ref: FIRDatabaseReference! 

override func viewDidLoad() { 
super.viewDidLoad() 

    ref = FIRDatabase.database().reference() 

//======Check if logged in, if so hide login button 
    if let user = FIRAuth.auth()?.currentUser 
    { 
     self.logoutButton.alpha = 1.0 
     self.userNameLabel.text = user.email 
    } 
    else 
    { 
     self.logoutButton.alpha = 0.0 
     self.userNameLabel.text = "" 
    } 
} 

//======LogIn 

@IBAction func loginAction(_ sender: AnyObject) 
{ 
    if self.emailField.text == "" || self.passwordField.text == "" 
    { 
     let alertController = UIAlertController(title: "Oops!", message: "Please enter an email and password.", preferredStyle: .alert)   
     let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil) 
     alertController.addAction(defaultAction) 

     self.present(alertController, animated: true, completion: nil) 
    } 
    else 
    { 
     FIRAuth.auth()?.signIn(withEmail: self.emailField.text!, password: self.passwordField.text!) { (user, error) in 
      if error == nil 
      { 
       self.logoutButton.alpha = 1.0 
       self.userNameLabel.text = user!.email 
       self.emailField.text = "" 
       self.passwordField.text = "" 
     // ===Segue to DataInput 
       self.performSegue(withIdentifier: "loginSegue",sender: nil) 
      } 
      else 
      { 
       let alertController = UIAlertController(title: "Oops!", message: error?.localizedDescription, preferredStyle: .alert) 
       let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil) 
       alertController.addAction(defaultAction) 
       self.present(alertController, animated: true, completion: nil) 
      } 
     } 
    } 
} 

이는 데이터 입력 페이지로 링크 :

import UIKit 
import Firebase 

var ref: FIRDatabaseReference! 
let user = FIRAuth.auth()?.currentUser 

var myEmptyField = "" 
var myUid = user!.uid 

class DataInputViewController: UIViewController { 

@IBAction func unwindDataInputViewController(segue: UIStoryboardSegue) { 
} 

var newAccount: String! 
var myLon: String! 
var myLat: String! 


// ref user data on Firebase 
let ownernameRef = FIRDatabase.database().reference().child("https://stackoverflow.com/users/\(myUid)/ownername") 
let nameRef = FIRDatabase.database().reference().child("https://stackoverflow.com/users/\(myUid)/name") 
let typeRef = FIRDatabase.database().reference().child("users/\(myUid)/type") 

@IBOutlet weak var ownerNameTextField: UITextField! 
@IBOutlet weak var nameTextField: UITextField! 
@IBOutlet weak var areaTextField: UITextField! 
@IBOutlet weak var typeTextField: UITextField! 

override func viewDidLoad() { 
    super.viewDidLoad() 
// clearNull() 
} 

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 

    //reads database to viewcontroller 
    if newAccount == "no" { 

    self.ownernameRef.observe(.value) { (snap:FIRDataSnapshot) in self.ownerNameTextField.text = (snap.value as AnyObject).description} 
    self.nameRef.observe(.value) { (snap:FIRDataSnapshot) in self.nameTextField.text = (snap.value as AnyObject).description} 
    self.typeRef.observe(.value) { (snap:FIRDataSnapshot) in ion} 

      } 
    }else{ 
     if newAccount == "yes"{ 
      let date = Date() 
      let formatter = DateFormatter() 
      formatter.dateFormat = "dd.MM.yyyy" 
      let startDate = formatter.string(from: date) 

      accountSetupDateTextField.text = startDate 

     // clearNull() 
     } 
    } 

답변

0

난 당신이 5 개월 만에 문제를 해결하지만, 아마 다른 사람이 답을 필요가 있기를 바랍니다. 변수 "VAR"

  • 변화 "var과 같은

    • 세트"하자 사용자 = FIRAuth.auth()? currentUser "입니다

      는 오늘 같은 문제를 가지고 있었고, 단지 내가 발견 해결 myUid = 사용자! "을"var에 myUid = 문자열() "당신의 DataInputViewController의 viewDidLoad에 방법에
    • 넣어"nil을 사용자의 "UserLoginViewController 넣어의 viewDidLoad에 방법에
    • "= 사용자 = FIRAuth.auth (.uid)? currentUser "를 추가하고"myUid = user! .uid "를 추가하십시오.

    이 모든 것이 나를 위해 완벽하게 작동합니다!

    희망이 답변으로 누군가를 도울 수 있기를 바랍니다.

  • 관련 문제