SwiftUI、Firebase 链接以确认电子邮件

Posted

技术标签:

【中文标题】SwiftUI、Firebase 链接以确认电子邮件【英文标题】:SwiftUI, Firebase link to confirm Email 【发布时间】:2020-08-03 16:49:56 【问题描述】:

我想增加在注册期间发送验证电子邮件的可能性。 如何在函数内部和 SignupView 中插入“sendEmailVerificationWithCompletion”?非常感谢:)

import SwiftUI
import FirebaseAuth

// Add code here:
static func createUser(withEmail email:String, name: String, password:String, completionHandler:@escaping (Result<Bool,Error>) -> Void) 
    Auth.auth().createUser(withEmail: email, password: password)  (authResult, error) in
        if let err = error 
            completionHandler(.failure(err))
            return
        
        guard let _ = authResult?.user else 
            completionHandler(.failure(error!))
            return
        
        let data = FBUser.dataDict(uid: authResult!.user.uid, name: name, email: authResult!.user.email!)
        
        FBFirestore.mergeFBUser(data, uid: authResult!.user.uid)  (result) in
            completionHandler(result)
        
        completionHandler(.success(true))
    


//And add code here:
struct SignUpView: View 
    var body: some View 
        VStack(spacing: 20 ) 
            Button(action: 
                FBAuth.createUser(withEmail: self.user.email, name: self.user.fullname, password: self.user.password)  (result) in
                    switch result 
                    case .failure(let error):
                        self.errorString = error.localizedDescription
                        self.showError = true
                    case .success(_):
                        print("Account creation successful")
                    
                
            ) 
                Text("Register")
            
        
    

【问题讨论】:

【参考方案1】:

您可以在该用户登录后随时将 Firebase 告知 send a verification email to the current user。例如,您可以在创建用户帐户后立即这样做:

Auth.auth().createUser(withEmail: email, password: password)  (authResult, error) in
    if let err = error 
        completionHandler(.failure(err))
        return
    
    guard let _ = authResult?.user else 
        completionHandler(.failure(error!))
        return
    

    // send verification email
    Auth.auth().currentUser?.sendEmailVerification  (error) in
      // ...
    

    // write profile to database
    let data = FBUser.dataDict(uid: authResult!.user.uid, name: name, email: authResult!.user.email!)
    
    FBFirestore.mergeFBUser(data, uid: authResult!.user.uid)  (result) in
        completionHandler(result)
    
    completionHandler(.success(true))

【讨论】:

非常感谢 :) 我做到了。带有链接的电子邮件正确到达,即使它没有确认电子邮件,它也会登录。如果链接之前没有被确认,我如何添加一条规则说它不应该登录? 这是不可能的,但也不需要。您可能想要的是当帐户未验证时应用程序不会继续运行,您可以通过检查用户的isEmailVerified 来做到这一点。然后,为了确保数据访问安全,您需要先检查服务器中的相同属性,然后再允许它们访问任何数据。这个话题之前已经讲过了,请看***.com/a/56670780、***.com/a/48029049和***.com/a/55328819 好的,我试试看:)再次感谢

以上是关于SwiftUI、Firebase 链接以确认电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 确认电子邮件未发送

Firebase auth 邮件验证是没用的,因为用户即使不点击确认链接也可以访问应用

Firebase Auth 密码重置:如何正确发送包含确认码的密码重置电子邮件?

使用 Firebase 电子邮件验证的动态/深度链接?

在确认注册之前验证用户的电子邮件地址,使用 Flutter 和 Firebase

SwiftUI 如何在不使用 List 的情况下从 @ObservedObject ViewModel 获取 Firebase 数据