如何在视图模型中实现 Firebase 电话身份验证?

     2023-02-19     141

关键词:

【中文标题】如何在视图模型中实现 Firebase 电话身份验证?【英文标题】:How can firebase phone auth be implemented in view model? 【发布时间】:2021-04-10 04:42:00 【问题描述】:

我正在尝试使用 Kotlin 在视图模型中添加 Firebase 电话身份验证代码。问题是PhoneAuthProvider 需要一个活动。有谁知道如何在不需要活动的情况下在视图模型中实现此代码?

谢谢!

val mCallbacks: PhoneAuthProvider.OnVerificationStateChangedCallbacks ...

val options = PhoneAuthOptions.newBuilder(auth).apply 
  setPhoneNumber(phoneNumber)
  setTimeout(120L, TimeUnit.SECONDS)
  setActivity(this) <-------------------------- // Activity (for callback binding)
  setCallbacks(mCallbacks)
.build()
PhoneAuthProvider.verifyPhoneNumber(options)

【问题讨论】:

【参考方案1】:

结果证明这是对 API 20 (check out this issue on Github) 的有意更改,尽管它违反了 MVVM 架构。需要活动的原因是该方法回退到 reCAPTCHA。实现它的正确方法是“尚未确定”。

【讨论】:

你最终选择了两个“邪恶”中的哪一个,视图模型中的活动实例或直接在片段/活动中做所有事情? 不能再同意了,他们都是邪恶的。但是不,永远不要在视图模型中使用活动实例。可惜还没修好。【参考方案2】:

我的方法是在 viewModel 中包含所有内容,包括回调。然后我在 viewModel 中调用一个函数并传入一个活动参数。见下文:

fun verifyPhoneNumber(phoneNumber: String, activity: Activity) 
        _validFullPhoneNumber.value = phoneNumber
        val options = PhoneAuthOptions.newBuilder(mAuth)
            .setPhoneNumber(phoneNumber)       // Phone number to verify
            .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
            .setActivity(activity)
            .setCallbacks(callbacks)          // OnVerificationStateChangedCallbacks
            .build()
        PhoneAuthProvider.verifyPhoneNumber(options)
    

在 UI 控制器中,我称之为片段:

viewModel.verifyPhoneNumber(validatedPhoneNumber, requireActivity())

与重新发送按钮功能相同。

视图模型:

fun resendVerificationCode(activity: Activity) 
        val options =
            PhoneAuthOptions.newBuilder(mAuth)
                .setPhoneNumber(_validFullPhoneNumber.value!!) // Phone number to verify
                .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
                .setActivity(activity)
                .setCallbacks(callbacks) // OnVerificationStateChangedCallbacks
                .setForceResendingToken(_resendToken) // ForceResendingToken from callbacks
                .build()

        PhoneAuthProvider.verifyPhoneNumber(options)
        _isVerificationCodeExpired.value = false
    

UI 控制器(片段):

 viewModel.resendVerificationCode(requireActivity())

【讨论】:

在firebase中实现电话和电子邮件身份验证的最佳方法是一次性使用?

】在firebase中实现电话和电子邮件身份验证的最佳方法是一次性使用?【英文标题】:Bestapproachinimplementingbothphoneandemailauthinfirebaseforasingleuse?【发布时间】:2020-05-3109:12:21【问题描述】:我正在开发一个颤振应用程序,我希望我... 查看详情

如何在 MVVM-C RxSwift 中实现 firebase 身份验证

】如何在MVVM-CRxSwift中实现firebase身份验证【英文标题】:HowtoimplementfirebaseauthintoMVVM-CRxSwift【发布时间】:2020-03-2512:27:07【问题描述】:我正在尝试实现一个MVVM-Crxswift应用程序。我的注册视图控制器有一个虚拟机,用户名和密码... 查看详情

在 Firebase 电话身份验证中未接收代码。

】在Firebase电话身份验证中未接收代码。【英文标题】:NotReceivingcodeinFirebasePhoneAuthentication.【发布时间】:2017-10-0613:53:21【问题描述】:我正在尝试在我的应用中实现Firebase电话身份验证。我在GitHub上引用了firebaseandroid文档,但... 查看详情

Firebase 电话身份验证 (Flutter) 在某些 iOS 设备中不起作用

】Firebase电话身份验证(Flutter)在某些iOS设备中不起作用【英文标题】:FirebasePhoneAuth(Flutter)isnotworkinginsomeiOSdevices【发布时间】:2019-10-0520:49:42【问题描述】:我已经使用firebase电话身份验证在颤振应用中实现了电话号码身份验证... 查看详情

Firebase 身份验证服务

】Firebase身份验证服务【英文标题】:FirebaseAuthenticationService【发布时间】:2019-02-0611:21:01【问题描述】:我想设置多个认证服务。好像用户使用电子邮件和密码或电话号码登录,但我希望用户同时使用电子邮件和密码以及电话... 查看详情

如何在用于编辑 HTML 的 Javascript 组件中实现视图模型分离?

】如何在用于编辑HTML的Javascript组件中实现视图模型分离?【英文标题】:HowcanIachieveview-modelseparationinaJavascriptcomponentforeditingHTML?【发布时间】:2015-09-2600:27:41【问题描述】:我需要为特定的HTML子集构建一个浏览器内WYSI(或多或... 查看详情

在 SwiftUI 中实现 Firebase 身份验证时,Xcode 13 找不到 FacebookAppID [重复]

】在SwiftUI中实现Firebase身份验证时,Xcode13找不到FacebookAppID[重复]【英文标题】:Xcode13cannotfindFacebookAppIDwhenimplementingFirebaseauthinSwiftUI[duplicate]【发布时间】:2021-10-3023:50:53【问题描述】:Xcode13的一个主要变化是info.plist不再可见。... 查看详情

可以在 Firebase 3 中实现自定义身份验证属性并将其与安全安全规则一起使用吗?

】可以在Firebase3中实现自定义身份验证属性并将其与安全安全规则一起使用吗?【英文标题】:CancustomauthpropertiesbeimplementedandusedwithsecuritysecurityrulesinFirebase3?【发布时间】:2016-09-1916:15:30【问题描述】:legacyFirebasedocumentation表示... 查看详情

如何在 ASP.NET MVC 5 中实现自定义身份验证

】如何在ASP.NETMVC5中实现自定义身份验证【英文标题】:HowtoimplementcustomauthenticationinASP.NETMVC5【发布时间】:2015-10-1314:09:48【问题描述】:我正在开发一个ASP.NETMVC5应用程序。我有一个现有的数据库,我从中创建了我的ADO.NET实体... 查看详情

如何在 webapp 中实现 firebase 云消息传递? [关闭]

】如何在webapp中实现firebase云消息传递?[关闭]【英文标题】:Howtoimplementfirebasecloudmessaginginwebapp?[closed]【发布时间】:2016-06-3018:13:20【问题描述】:如果有人有任何示例应用程序可以在web应用程序中实现firebase云消息传递,这将... 查看详情

如何在 Firebase 中实现基于角色的访问控制

】如何在Firebase中实现基于角色的访问控制【英文标题】:howdoIimplementrolebasedaccesscontrolinfirebase【发布时间】:2013-10-3111:39:04【问题描述】:这是我第一次涉足Firebase和nosql,我来自SQL背景。使用简单登录安全电子邮件/密码,如何... 查看详情

如何在启用电话身份验证的情况下导出 Firebase 用户帐户

】如何在启用电话身份验证的情况下导出Firebase用户帐户【英文标题】:HowtoexportfirebaseuseraccountwithphoneAuthenabled【发布时间】:2018-01-2703:03:26【问题描述】:我需要导出和导入firebase用户帐户。它适用于使用电子邮件密码验证注册... 查看详情

如何在颤振应用程序中进行 Firebase 电话身份验证

】如何在颤振应用程序中进行Firebase电话身份验证【英文标题】:Howtodofirebasephoneauthinaflutterapp【发布时间】:2019-10-1309:09:06【问题描述】:我已完成附加数据库的所有步骤,并证明我可以获得不受任何身份验证规则保护的数据。... 查看详情

Firebase 使用电话号码对现有的自定义登录流程进行身份验证

】Firebase使用电话号码对现有的自定义登录流程进行身份验证【英文标题】:FirebaseAuthtoexistingcustomloginflowwithPhoneNumber【发布时间】:2021-11-2010:35:13【问题描述】:我有一个应用程序已在Play商店上发布,并使用了一些安全规则公... 查看详情

如何为 Flutter Web 添加 Firebase 预构建的身份验证 UI?

】如何为FlutterWeb添加Firebase预构建的身份验证UI?【英文标题】:HowtoaddFirebasepre-builtAuthUIforflutterweb?【发布时间】:2020-09-2817:50:14【问题描述】:如何在FlutterWeb应用中实现Firebase内置ui?我看过很多教程,但所有教程都实现了googl... 查看详情

是否有用于在 Django 中实现视图模型装饰器 ala Draper 的库?

】是否有用于在Django中实现视图模型装饰器alaDraper的库?【英文标题】:IstherealibraryforimplementingviewmodeldecoratorsalaDraperinDjango?【发布时间】:2015-07-0219:24:14【问题描述】:我想要“视图模型装饰器”,例如Draper在Django中为Rails实现... 查看详情

如何在我的域模型中实现 ASP.NET 成员资格提供程序

】如何在我的域模型中实现ASP.NET成员资格提供程序【英文标题】:HowtoimplementASP.NETmembershipproviderinmydomainmodel【发布时间】:2010-10-2302:33:27【问题描述】:在一个网站中,我需要整合会员资格和身份验证。所以我想使用ASP.NETMembers... 查看详情

如何在angular4的firebase电话身份验证中重新发送短信验证?

】如何在angular4的firebase电话身份验证中重新发送短信验证?【英文标题】:HowtoresendSMSverificationinfirebasephoneauthenticationinangular4?【发布时间】:2019-01-1302:42:01【问题描述】:我正在从事angular4和ionic3项目。在项目中,我为登录页面... 查看详情