使用 SMS Firebase 进行身份验证:错误 (auth/argument-error)

Posted

技术标签:

【中文标题】使用 SMS Firebase 进行身份验证:错误 (auth/argument-error)【英文标题】:Auth with SMS Firebase: Error (auth/argument-error) 【发布时间】:2021-12-21 10:52:36 【问题描述】:

我正在尝试在 Vuejs (Quasar) Applycation 上使用带有电话号码的 firebase 身份验证。 按照文档,第一步是获取验证码。我相信这是我做错的地方:

为了测试我正在使用一个文件: html模板上的div:

  <div if="recaptcha-container" 
  data-sitekey="6LcsaxsdAAAAAEBn0sPDCEncnU9564MisyRuDzD_"
  data-callback="sendForm"
  data-size="invisible">
  </div>

下面,脚本中的身份验证代码。为了安全起见,我更改了敏感键。他们是正确的,我已经通过 GoogleAuth 成功验证了,使用相同的密钥

import  initializeApp  from "firebase/app"
import  getAuth, RecaptchaVerifier,GoogleAuthProvider,signInWithPopup  from "firebase/auth"

const firebaseConfig = 
  apiKey: "xxxxxxxxxxxxxxxx",
  authDomain: "xxxxxx.firebaseapp.com",
  projectId: "dev-meetups-aa72b",
  storageBucket: "xxxxxxxx.appspot.com",
  messagingSenderId: "xxxxxx",
  appId: "xxxxxxxxxxxxxxxxx",
  measurementId: "G-xxxxxx"
;

// Initialize Firebase
const app = initializeApp(firebaseConfig)
const provider = new GoogleAuthProvider();
const auth = getAuth(app)

按照文档和一些教程,我在 Created 上初始化验证码方法:

 created() 
    this.initilizeCaptcha()
  ,

方法:

initilizeCaptcha () 
window.recaptchaVerifier = new RecaptchaVerifier('recaptcha-container', 
  'size': 'invisible',
  'callback': (response) => 
    console.log(response)
    // reCAPTCHA solved, allow signInWithPhoneNumber.
    // ...
  ,
  'expired-callback': () => 
    // Response expired. Ask user to solve reCAPTCHA again.
    // ...
  
, auth);

可以看到,对象 RecapthaVerifier,从 recaptcha html div 和另一个参数接收 id,包括对象 auth。

但是,当执行这个时,我得到了这个错误:

我无法在任何地方找到解决方案。 如果需要,我可以提供身份验证参数。

完整代码 https://codepen.io/eltonjhsouza/pen/gOxzvLq

【问题讨论】:

【参考方案1】:

关于这个问题,我在 Firebase 的 SDK 的所有步骤中都进行了调试,我设法解决了它。

其中一个问题出在这里:

<div if="recaptcha-container" 
  data-sitekey="6LcsaxsdAAAAAEBn0sPDCEncnU9564MisyRuDzD_"
  data-callback="sendForm"
  data-size="invisible">
 </div>

div 的 id 属性类型错误,我输入了 IF。

在浏览器中调试代码,我意识到下面的方法是在实例auth()之前启动的;

window.recaptchaVerifier = new RecaptchaVerifier('recaptcha-container', 
  'size': 'invisible',
  'callback': (response) => 
    console.log(response)
    // reCAPTCHA solved, allow signInWithPhoneNumber.
    // ...
  ,
  'expired-callback': () => 
    // Response expired. Ask user to solve reCAPTCHA again.
    // ...
  
, auth);

所以我把这个调用放在@click of button上。

我希望这个问题可以帮助别人。

【讨论】:

以上是关于使用 SMS Firebase 进行身份验证:错误 (auth/argument-error)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Firebase Auth 进行身份验证时,短信验证码请求失败

如何使用 Authy+Amazon lambda+Firebase 实现 SMS/2FA 验证?

在 Flutter 中输入错误的 SMS 代码时如何捕获错误?

使用带有 android firebase 短信认证的模拟器

使用 Unity 进行 Firebase 电话身份验证

Firebase 使用电话号码进行身份验证:使用未解析的标识符 AuthAPNSTokenTypeProd 和 UIBackgroundFetchResultNoData 错误