React Native中Firebase Twitter登录失败,报错auth/invalid-credential
修复Twitter认证的Invalid Credential错误
嘿,问题一眼就能看出来——你错误地用Google的认证提供者来处理Twitter的登录凭证了,这就是为啥会报"无法解析Google id_token"的错误!
核心问题
你代码里用了firebase.auth.GoogleAuthProvider.credential()来生成Twitter登录的凭证,但这个方法是专门给Google登录设计的。Twitter认证得用Firebase对应的TwitterAuthProvider才行。
修复步骤
1. 替换认证提供者
把Google的认证提供者换成Twitter的,用TwitterAuthProvider.credential()方法来创建凭证,它需要传入Twitter返回的authToken和authTokenSecret:
// 把原来这行 const credential = firebase.auth.GoogleAuthProvider.credential(loginData.authToken, loginData.authTokenSecret) // 改成下面这样 const credential = firebase.auth.TwitterAuthProvider.credential(loginData.authToken, loginData.authTokenSecret)
2. 额外验证项(避免踩坑)
为了确保登录流程完全正常,你可以再检查这几点:
- 确认Firebase控制台里,Twitter登录配置的消费者密钥(API Key)和消费者密钥密码(API Secret),和你代码中
TwitterKeys里的内容完全一致,没有拼写错误。 - 去Twitter开发者平台查看应用的回调URL,是否和Firebase提供的回调地址一致(一般是
https://<你的项目ID>.firebaseapp.com/__/auth/handler)。 - 可以多打印几次
loginData的完整内容,确认authToken和authTokenSecret的格式是正确的,没有返回异常值。
修改后的完整代码
const { RNTwitterSignIn } = NativeModules; RNTwitterSignIn.init(TwitterKeys.TWITTER_CONSUMER_KEY, TwitterKeys.TWITTER_CONSUMER_SECRET) RNTwitterSignIn.logIn() .then(loginData => { console.log("loginData="+loginData.authToken + " " + loginData.authTokenSecret) console.log(JSON.stringify(loginData)); // 替换为Twitter专属的认证提供者 const credential = firebase.auth.TwitterAuthProvider.credential(loginData.authToken, loginData.authTokenSecret) return firebase.auth().signInWithCredential(credential); }).then((currentUser)=>{ this.props.navigation.navigate('FlyerListing') AsyncStorage.setItem("user", currentUser.uid) console.log("AsyncStorage= " + currentUser.uid) }) .catch(error => { console.log(error) })
这样修改后,应该就能顺利完成Twitter的Firebase认证了。
内容的提问来源于stack exchange,提问作者Savad
相关产品推荐
相关产品推荐

