如何在 Android 的 Firebase 身份验证中更改登录电话号码?
Posted
技术标签:
【中文标题】如何在 Android 的 Firebase 身份验证中更改登录电话号码?【英文标题】:How to change the Signed in Phone Number in Firebase Authentication for Android? 【发布时间】:2017-11-19 23:02:02 【问题描述】:我正在使用 android Firebase Auth Ui 在 Android 应用程序中提供基于电话号码的登录选项。我正在尝试为已登录的用户提供一个附加选项,以将其已登录的电话号码切换到另一个保持相同用户帐户的号码。
但根据Firebase Docs for Phone number,没有选项可以更改登录号码。
有一些选项可以将不同的身份验证提供商(如电子邮件、谷歌或 Facebook 登录等)链接到同一个帐户。但是没有提到如何更改电话号码或电子邮件 ID 以保持相同的用户 ID。
是否有解决方法或方法可以实现这一目标?
【问题讨论】:
您可以通过 USER token 或 id 将用户信息转移到新号码 你能告诉我更具体的方法吗?或者指向一个解释这种方法的链接。 我只是在猜测,当用户切换号码时,只需在您的 firebase 数据库中创建另一个具有不同用户 ID 的条目,但将旧数据复制到新用户 ID。然后删除旧条目 这是一个很好的解决方法。但它不适合我的用例。我有许多其他的数据库表,其中记录了用户 ID。 制作云功能,因此更改所有其他表中的用户 ID。我现在没有找到任何其他解决方案 【参考方案1】:存在用于更新当前用户电话号码的 API:FirebaseUser#updatePhoneNumber(PhoneAuthCredential credential)
【讨论】:
你必须举一个简短的例子。 @PratikButani 我也不明白为什么文档没有反映代码的外观或工作方式。太抽象了,我也看不懂。【参考方案2】:显然 - 根据项目维护者 - FirebaseUI-Android doesn't support this feature,他们似乎没有计划在短期内这样做:(
【讨论】:
【参考方案3】:我也遇到了更新用户电话号码的挑战,当我继续文档时,我通过使用我已经完成了这项任务得到了一些东西。
您可以点击here获取文档
现在你可以使用的方法: - 对于 java android 项目。
PhoneAuthCredential phoneAuthCredential = PhoneAuthProvider.getCredential( "+91-98298XXXX2", "OTP_CODE" );
// Update Mobile Number...
firebaseAuth.getCurrentUser().updatePhoneNumber(phoneAuthCredential)
.addOnCompleteListener(new OnCompleteListener <Void>()
@Override
public void onComplete(@NonNull Task <Void> task)
if (task.isSuccessful())
// Update Successfully
else
// Failed
);
【讨论】:
【参考方案4】: val options = PhoneAuthOptions.newBuilder(FirebaseAuth.getInstance())
.setPhoneNumber(phoneNumber) // Phone number to verify
.setTimeout(100L, TimeUnit.SECONDS) // Timeout and unit
.setActivity(activity) // Activity (for callback binding)
.setCallbacks(returnCallBack()) // OnVerificationStateChangedCallbacks
.build()
PhoneAuthProvider.verifyPhoneNumber(options)
private fun returnCallBack() = object : PhoneAuthProvider
.OnVerificationStateChangedCallbacks()
override fun onVerificationCompleted(credential: PhoneAuthCredential)
FirebaseAuth.getCurrentUser()?.updatePhoneNumber(credential)
override fun onVerificationFailed(e: FirebaseException)
// This callback is invoked in an invalid request for verification is made,
// for instance if the the phone number format is not valid.
Log.e("phone", e.toString())
override fun onCodeSent(verificationId: String, token: PhoneAuthProvider.ForceResendingToken)
//You need this to pass as a parameter for the update method call.
vericationSent = verificationId
fun confirmChange(code: String, context: Context?)
if(code.contains(Regex(onlyNumber)))
Log.d("codeSent" , "Right code : $code")
FirebaseAuth.getCurrentUser()
?.updatePhoneNumber(PhoneAuthProvider.getCredential(vericationSent, code))
?.addOnCompleteListener task ->
//it worked if you reach here.
?.addOnFailureListener
//Show the error to user
vericationSent = EMPTY
else
Log.d("codeSent" , "wrong code : $code")
【讨论】:
嗨 TheSeeKer。感谢您的回答。通常那里更欢迎带有解释的答案。您想为您的答案添加解释吗? 嗨 MaxV,使用新电话号码(在构建选项对象时)从您拥有应用程序的旧电话设备(使用 Firebase 身份验证)进行此呼叫“PhoneAuthProvider.verifyPhoneNumber(options)”。然后,一旦您从要开始使用的设备收到代码,请将此代码与您从 onCodeSent 回调收到的 verifyId 一起使用,以进行以下调用“FirebaseAuth.getCurrentUser() ?.updatePhoneNumber(PhoneAuthProvider.getCredential(vericationSent, code ))”。就是这样。【参考方案5】:试试这个
//Send otp to phone number
String verificationId;
private void startLoginFirebase()
PhoneAuthProvider.getInstance(firebaseAuth).verifyPhoneNumber(phone, 90L, TimeUnit.SECONDS, PhoneAuthActivity.this, new PhoneAuthProvider.OnVerificationStateChangedCallbacks()
@Override
public void onCodeSent(@NonNull String s, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken)
super.onCodeSent(s, forceResendingToken);
verificationId = s;
updatePhoneNum();
@Override
public void onCodeAutoRetrievalTimeOut(@NonNull String s)
super.onCodeAutoRetrievalTimeOut(s);
@Override
public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential)
@Override
public void onVerificationFailed(@NonNull FirebaseException e)
processFurther(e.getLocalizedMessage().toString(), 0);
);
//Verify Otp
private void updatePhoneNum()
PhoneAuthCredential phoneAuthCredential = PhoneAuthProvider.getCredential(verificationId, otp);
firebaseAuth.getCurrentUser().updatePhoneNumber(phoneAuthCredential).addOnCompleteListener(new OnCompleteListener<Void>()
@Override
public void onComplete(@NonNull Task<Void> task)
);
【讨论】:
以上是关于如何在 Android 的 Firebase 身份验证中更改登录电话号码?的主要内容,如果未能解决你的问题,请参考以下文章
Android:使用Firebase进行Facebook身份验证无法启动
使用带有 android firebase 短信认证的模拟器
Firebase 电话身份验证打开浏览器以在 Android 中进行重新验证
如何删除 Firebase 身份验证 google ID 删除