| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- // Copyright 2020 Google LLC
- //
- // 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 FirebaseAuth
- import UIKit
- class PasswordlessViewController: OtherAuthViewController {
- private var email: String!
- override func viewDidLoad() {
- super.viewDidLoad()
- configureUI(for: .Passwordless)
- registerForLoginNotifications()
- }
- override func buttonTapped() {
- guard let email = textField.text, !email.isEmpty else { return }
- sendSignInLink(to: email)
- }
- // MARK: - Firebase 🔥
- private let authorizedDomain: String = "ENTER AUTHORIZED DOMAIN"
- private func sendSignInLink(to email: String) {
- let actionCodeSettings = ActionCodeSettings()
- // Update "demo" to match the path defined in the dynamic link.
- let stringURL = "https://\(authorizedDomain)/demo"
- actionCodeSettings.url = URL(string: stringURL)
- // The sign-in operation must be completed in the app.
- actionCodeSettings.handleCodeInApp = true
- actionCodeSettings.setIOSBundleID(Bundle.main.bundleIdentifier!)
- AppManager.shared.auth()
- .sendSignInLink(toEmail: email, actionCodeSettings: actionCodeSettings) { error in
- guard error == nil else { return self.displayError(error) }
- // Set `email` property as it will be used to complete sign in after opening email link
- self.email = email
- print("successfully sent email")
- }
- }
- @objc
- private func passwordlessSignIn() {
- // Retrieve link that we stored in user defaults in `SceneDelegate`.
- guard let link = UserDefaults.standard.value(forKey: "Link") as? String else { return }
- AppManager.shared.auth().signIn(withEmail: email, link: link) { result, error in
- guard error == nil else { return self.displayError(error) }
- guard let currentUser = AppManager.shared.auth().currentUser else { return }
- if currentUser.isEmailVerified {
- print("User verified with passwordless email.")
- self.navigationController?.dismiss(animated: true) {
- self.delegate?.loginDidOccur()
- }
- } else {
- print("User could not be verified by passwordless email")
- }
- }
- }
- // MARK: - Private Helpers
- private func registerForLoginNotifications() {
- NotificationCenter.default.addObserver(
- self,
- selector: #selector(passwordlessSignIn),
- name: Notification.Name("PasswordlessEmailNotificationSuccess"),
- object: nil
- )
- }
- }
|