如何禁用Firebase Phone Auth Android自动登录(onVerificationCompleted回调)

时间:2017-07-27 16:20:47

标签: android firebase firebase-authentication

有没有办法禁用Android"即时验证" (使用Firebase Phone Auth自动登录)?有一种方法可以禁用"自动检索"通过将verifyPhoneNumber的超时设置为0(参考:https://firebase.google.com/docs/reference/android/com/google/firebase/auth/PhoneAuthProvider.html)。但是,我找不到记录的方法来禁用即时验证。

我问的是因为潜在的安全问题:从设备中移除SIM卡仍会自动登录该用户!换句话说,使用其他人的旧设备的用户可以使用他们的旧电话号码登录。以下是复制步骤:

  • 使用功能性SIM卡安装在Android上
  • 使用与该SIM卡关联的号码登录
  • 这会触发自动登录
  • 退出
  • 关闭设备并取出SIM卡
  • 重新启用设备并尝试使用相同的号码登录

观察到的行为: 尽管没有合适的SIM卡,用户仍会自动登录

预期行为: 如果用户的设备没有与输入的电话号码相关联的SIM卡,则它们不会自动登录,并且会向该号码发送短信。

5 个答案:

答案 0 :(得分:6)

更新,11.5.09应该已经到达几乎所有用户的设备。 SIM卡更改后将立即停止验证。您也可以使用此技巧进行手动测试。

在即将于第三季度末发布的即将推出的Google Play服务v11.5版本中,将自动检测SIM卡更改,这将阻止即时验证工作。新版本将自动推送到用户的设备,无需更改SDK。

要获得最佳的用户体验和选择加入率,最好等待Play服务更新,而不是自己添加可怕的运行时权限(读取和比较电话号码)。谢谢你的耐心等待!

答案 1 :(得分:2)

不幸的是,there isn't a way to disable Instant Verification 目前似乎

在询问开发人员添加此功能后(实际上是different reason),我回复了it will be added to the feature request

也许你应该在那里添加评论,指明你的安全性发现。 也许它会加快添加此功能的过程:)

答案 2 :(得分:1)

不确定何时添加此功能,但实际上您可以添加伪造的电话号码和预期的验证码,以覆盖自动验证: enter image description here

答案 3 :(得分:0)

您可以通过以下方式获取设备上使用过的电话号码:

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

并添加必需的权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

FirebaseAuth获取电话号码:

String number = FirebaseAuth.getInstance().getCurrentUser().getPhoneNumber();

在它们之间进行比较,如果可以继续,则使用twilio或某些类似的服务发送短信

答案 4 :(得分:0)

无需更换SIM卡!!!!

为了多次获得OTP /代码进行测试,请遵循以下代码 在活动的oncreate中,您将获得代码 现在,请卸载该应用,然后再次确认您将获得一个不会立即生效的新代码。

如果您仍然无法做到这一点,我将分享我的完整活动代码!

IComponentProps