2017-07-27 60 views
1

有没有办法通过Firebase手机身份验证禁用Android“即时验证”(自动登录)?通过将verifyPhoneNumber的超时设置为0(参考:https://firebase.google.com/docs/reference/android/com/google/firebase/auth/PhoneAuthProvider.html),可以禁用“自动检索”。但是,我无法找到一种记录的方式来禁用即时验证。如何禁用Firebase手机身份验证Android自动登录(onVerificationCompleted回调)

我在问,是否存在潜在的安全问题:从设备中取出SIM卡仍自动登录该用户!换句话说,使用其他人的旧设备的用户可以使用他们的旧电话号码登录。以下是再现步骤:

  • 要在Android上,设备上有功能的SIM卡
  • 登录使用这会触发与SIM卡
  • 关联的号码自动登录在
  • 登出
  • 关闭设备电源,然后再打开取出SIM卡
  • 打开设备,并试图与相同数量的
登录0

观察到的行为: 的用户自动登录,尽管没有相应的SIM卡

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

+0

使用删除的短信从设备上退出您的Google帐户,然后重试。 – bojeil

+0

退出不起作用。我必须用工厂重置擦拭设备才能使其工作。 (在三星Galaxy Grand Prime上测试) – ian

回答

5

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


定于第三季度末即将到来的谷歌Play服务的V11.5发布,SIM卡的变化将是自动检测,将停止工作即时验证。新版本将自动推送到用户的设备,无需更改SDK。

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

+0

如何使用手动代码验证来测试我的代码? onVerificationCompleted始终被称为 –

+1

@pavelPoley您可以使用不在当前设备上的电话号码 –

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(); 

比较它们是否可以继续使用发送短信或类似的服务

+0

你会在Twilio SMS上放什么? Firebase电话验证控制验证码。你的意思是有两种认证机制?这听起来像一个巨大的痛苦。我们使用Firebase Phone Auth的原因是,我们不必编写自己的自定义Auth。 – ian