diff options
Diffstat (limited to 'Example/tvOSSample/tvOSSample/EmailLoginViewController.swift')
-rw-r--r-- | Example/tvOSSample/tvOSSample/EmailLoginViewController.swift | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/Example/tvOSSample/tvOSSample/EmailLoginViewController.swift b/Example/tvOSSample/tvOSSample/EmailLoginViewController.swift new file mode 100644 index 0000000..60dfc43 --- /dev/null +++ b/Example/tvOSSample/tvOSSample/EmailLoginViewController.swift @@ -0,0 +1,93 @@ +// Copyright 2017 Google +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import UIKit +import FirebaseAuth + +protocol EmailLoginDelegate { + func emailLogin(_ controller: EmailLoginViewController, signedInAs user: User) + func emailLogin(_ controller: EmailLoginViewController, failedWithError error: Error) +} +class EmailLoginViewController: UIViewController { + + // MARK: - Public Properties + + var delegate: EmailLoginDelegate? + + // MARK: - User Interface + + @IBOutlet private weak var emailAddress: UITextField! + @IBOutlet private weak var password: UITextField! + + // MARK: - User Actions + + @IBAction func logInButtonHit(_ sender: UIButton) { + guard let (email, password) = validatedInputs() else { return } + + Auth.auth().signIn(withEmail: email, password: password) { [unowned self] (user, error) in + guard let user = user else { + print("Error signing in: \(error!)") + self.delegate?.emailLogin(self, failedWithError: error!) + return + } + + print("Signed in as user: \(user.uid)!") + self.delegate?.emailLogin(self, signedInAs: user) + } + } + + @IBAction func signUpButtonHit(_ sender: UIButton) { + guard let (email, password) = validatedInputs() else { return } + + Auth.auth().createUser(withEmail: email, password: password) { [unowned self] (user, error) in + guard let user = user else { + print("Error signing up: \(error!)") + self.delegate?.emailLogin(self, failedWithError: error!) + return + } + + print("Created new user: \(user.uid)!") + self.delegate?.emailLogin(self, signedInAs: user) + } + } + + // MARK: - View Controller Lifecycle + + override func viewDidLoad() { + } + + // MARK: - Helper Methods + + /// Validate the inputs for user email and password, returning the username and password if valid, + /// otherwise nil. + private func validatedInputs() -> (email: String, password: String)? { + guard let userEmail = emailAddress.text, userEmail.count >= 6 else { + presentError(with: "Email address isn't long enough.") + return nil + } + + guard let userPassword = password.text, userPassword.count >= 6 else { + presentError(with: "Password is not long enough!") + return nil + } + + return (userEmail, userPassword) + } + + func presentError(with text: String) { + let alert = UIAlertController(title: "Error", message: text, preferredStyle: .alert) + alert.addAction(UIAlertAction(title: "Okay", style: .default)) + present(alert, animated: true) + } +} |