Skip to content

Instantly share code, notes, and snippets.

@mitnick78
Created January 4, 2022 20:32
Show Gist options
  • Save mitnick78/105f64e544217cfb4102f370681a9c8b to your computer and use it in GitHub Desktop.
Save mitnick78/105f64e544217cfb4102f370681a9c8b to your computer and use it in GitHub Desktop.
import SwiftUI
import Firebase
import LocalAuthentication
class AuthViewModel: ObservableObject {
@Published var userSession: FirebaseAuth.User?
@Published var showError: Bool = false
@Published var msgError: String = ""
@Published var email = ""
@Published var password = ""
// Mark: FaceID Propreties
@AppStorage("use_face_id") var useFaceID: Bool = false
@AppStorage("use_face_email") var faceEmail: String = ""
@AppStorage("use_face_password") var facePassword: String = ""
@AppStorage("log_status") var logStatus: Bool = false
static let shared = AuthViewModel()
init(){
userSession = Auth.auth().currentUser
}
// Mark : Firebase Login
func login(useFaceID: Bool, email: String = "", password: String = "" ) async throws {
let result = try await Auth.auth().signIn(withEmail: email != "" ? email : self.email , password: password != "" ? password : self.password)
DispatchQueue.main.async {
if useFaceID {
print(" test login => \(useFaceID)")
// Mark: Storing for future face Id Login
self.useFaceID = useFaceID
self.faceEmail = self.email
self.facePassword = self.password
}
self.userSession = result.user
}
}
// Mark: FaceID usage
func getBioMetricStatus() -> Bool {
let scanner = LAContext()
return scanner.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: .none)
}
// Mark: FaceID login
func authenticateUser() async throws {
let status = try await LAContext().evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "Login pour l'application")
if status {
print(self.facePassword)
print(self.faceEmail)
try await login(useFaceID: useFaceID, email: self.faceEmail, password: self.facePassword)
}
}
func signout() {
self.userSession = nil
try? Auth.auth().signOut()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment