Firebase 身份验证被调用两次

Posted

技术标签:

【中文标题】Firebase 身份验证被调用两次【英文标题】:Firebase auth is called twice 【发布时间】:2019-08-15 10:12:58 【问题描述】:

我正在使用注册/登录视图控制器创建一个简单的应用程序,该控制器导致一个 TableView 控制器。

问题是当我调用 loginBtnPressed 方法时,似乎 Auth.auth() 被调用了两次,因为打印语句“Login for user ...”被打印了两次,并且 performSegue 也被执行了两次。

有人可以帮忙看看发生了什么吗?

附加日志:

2019-03-25 13:13:50.299237+0530 countIT_Z[61176:7896870] - [I-ACS036002] 分析屏幕报告已启用。调用 +[FIRAnalytics setScreenName:setScreenClass:] 设置屏幕名称或覆盖默认屏幕类名称。要禁用屏幕报告,请在 Info.plist 中将标志 FirebaseScreenReportingEnabled 设置为 NO(布尔值) 2019-03-25 13:13:50.505813+0530 countIT_Z[61176:7896870] 5.18.0 - [Firebase/Analytics][I-ACS023007] Analytics v.50700000 开始 2019-03-25 13:13:50.507465+0530 countIT_Z[61176:7896870] 5.18.0 - [Firebase/Analytics][I-ACS023008] 要启用调试日志记录,请设置以下应用程序参数:-FIRAnalyticsDebugEnabled () 2019-03-25 13:13:51.043075+0530 countIT_Z[61176:7896954] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C1.1:2][0x7fb97370b740] 获取输出帧失败,状态 8196 2019-03-25 13:13:51.043302+0530 countIT_Z[61176:7896954] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C1.1:2][0x7fb97370b740] 获取输出帧失败,状态 8196 2019-03-25 13:13:51.044079+0530 countIT_Z[61176:7896954] TIC 读取状态 [1:0x0]: 1:57 2019-03-25 13:13:51.044260+0530 countIT_Z[61176:7896954] TIC 读取状态 [1:0x0]: 1:57 2019-03-25 13:13:53.550835+0530 countIT_Z[61176:7896752] [MC] systemgroup.com.apple.configurationprofiles 路径的系统组容器是 /Users/***/Library/Developer/CoreSimulator/Devices/18BEEB16 -AA64-48C6-B88D-FEF2CFA1EDA3/data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles 2019-03-25 13:13:53.552997+0530 countIT_Z[61176:7896752] [MC] 从私人有效用户设置中读取。 第一的 2019-03-25 13:13:59.763175+0530 countIT_Z[61176:7896969] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C2.1:2][0x7fb973502f00] 获取输出帧失败,状态 8196 2019-03-25 13:13:59.763425+0530 countIT_Z[61176:7896969] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C2.1:2][0x7fb973502f00] 获取输出帧失败,状态 8196 2019-03-25 13:13:59.764174+0530 countIT_Z[61176:7896969] TIC 读取状态 [2:0x0]: 1:57 2019-03-25 13:13:59.764619+0530 countIT_Z[61176:7896969] TIC 读取状态 [2:0x0]: 1:57 2019-03-25 13:14:00.422619+0530 countIT_Z[61176:7896953] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C4.1:2][0x7fb973714ae0] 获取输出帧失败,状态 8196 2019-03-25 13:14:00.423064+0530 countIT_Z[61176:7896953] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C4.1:2][0x7fb973714ae0] 获取输出帧失败,状态 8196 2019-03-25 13:14:00.423907+0530 countIT_Z[61176:7896953] TIC 读取状态 [4:0x0]: 1:57 2019-03-25 13:14:00.424707+0530 countIT_Z[61176:7896953] TIC 读取状态 [4:0x0]: 1:57 用户 Optional("a@b.com") 登录成功 2019-03-25 13:14:01.101242+0530 countIT_Z[61176:7896752] [警告] 仅警告一次:检测到约束模糊地建议表格视图单元格的内容视图高度为零的情况。我们正在考虑意外折叠并改用标准高度。

@IBAction func loginBtnPressed(_ sender: UIButton) 
        let userEmailId = loginEmailIdTF.text
        let userPassword = loginPasswordTF.text

        Auth.auth().signIn(withEmail: userEmailId!, password: userPassword!)  (status, error) in
            if error != nil 
                print("Login error")
             else 
                print("Login for user \(String(describing: userEmailId)) is successful")
                self.performSegue(withIdentifier: "goToAllCountersFromLogin", sender: self)
            
        

    

【问题讨论】:

当你在loginBtnPressed 函数中放置一个断点时,它会两次命中断点吗? @Len_X - 不,它没有,这指出了我的问题。我已将 segue 添加到按钮本身,并在 loginBtnPressed 中再次调用它。感谢您的帮助! 【参考方案1】:

我建议将您的方法更改为:

Auth.auth().signIn(withEmail: email, password: password)  [weak self] user, error in
  guard let strongSelf = self else  
    return 
  
  // Do segue here 


让我知道这是否有效

【讨论】:

以上是关于Firebase 身份验证被调用两次的主要内容,如果未能解决你的问题,请参考以下文章

必须点击登录按钮两次;使用 vue-router 和 firebase 身份验证

Swift:如果孩子的观察者被移除,则不会调用 Firebase 身份验证观察者

Firebase 身份验证,错误:NoSuchMethodError:在 null 上调用了方法“登录”

Spring Security 自定义 AuthenticationProvider 验证方法调用了两次

Firebase 电话身份验证验证 ID 从未设置。 (颤振iOS)

Firebase 身份验证 Twitter API 登录“这里没啥可看的”