我有一个支持Twitter登录的iOS Firebase应用程序,但偶尔signIn(with: credential
调用随机失败,我无法弄清楚原因。
首先用户使用Twitter登录(永不失败),然后我使用Twitter会话获取凭据,然后我使用这些凭据登录Firebase,有时会失败。
这里是完整的代码
func twitterLogin(_ done:@escaping (_ user: FIRUser?, _ err: Error?) -> Void) {
Twitter.sharedInstance().logIn() { session, error in
guard error == nil else {
done(nil, error)
return
}
let credential = FIRTwitterAuthProvider.credential(withToken: session!.authToken, secret: session!.authTokenSecret)
FIRAuth.auth()?.signIn(with: credential, completion: { (signUser, error) in
//User is signed in
// ERROR OCCURS HERE. ANY HELP WOULD BE GREATLY APPRECIATED
done(signUser, error)
})
}
}
这是我收到的确切错误消息。
UserInfo={NSUnderlyingError=0x600000442c10 {Error Domain=FIRAuthInternalErrorDomain Code=3 "(null)" UserInfo={FIRAuthErrorUserInfoDeserializedResponseKey={
code = 400;
errors = (
{
domain = global;
message = "Network error while to fetch VERIFY_CREDENTIAL from TWITTER.";
reason = invalid;
}
);
message = "Network error while to fetch VERIFY_CREDENTIAL from TWITTER.";
}}}, error_name=ERROR_INTERNAL_ERROR, NSLocalizedDescription=An internal error has occurred, print and inspect the error details for more information.})
我尝试专门搜索错误消息我从TWITTER获取"网络错误,同时从TWITTER获取VERIFY_CREDENTIAL。" 但我可以&# 39;找不到任何解决方案。我找到了一些我认为是日语的帖子,但我无法理解他们的解决方案。
我甚至在这里查看了Firebases iOS Auth错误
https://firebase.google.com/docs/auth/ios/errors
但是错误键 FIRAuthErrorUserInfoDeserializedResponseKey 甚至没有被列为signInWithCredential:completion:
的可能错误
答案 0 :(得分:0)
我看到了同样的错误。 codepen的例子:
https://codepen.io/mosse/pen/KmGMap
<button class="login">login</button>
<script src="https://www.gstatic.com/firebasejs/4.0.0/firebase.js"></script>
<script>
var config = {
apiKey: "AIzaSyDfJ5KuDofcZpahzl4H3XTl4f6R65gUyrQ",
authDomain: "authtest-3a944.firebaseapp.com",
projectId: "authtest-3a944",
};
firebase.initializeApp(config);
</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$(".login").click(function(){
var providerObj = new firebase.auth.TwitterAuthProvider();
firebase.auth().signInWithPopup(providerObj)
.then(result => {
console.log('success')
console.log(result.user)
})
.catch( err => {
console.log('failure')
console.log(err.message)
})
});
});
</script>
Firebase支持表明原因是由于Twitter端点不可靠,但没有提出任何解决方案。
使用Firebase 2.3.2的较旧项目不会复制错误,这表明应该有一个Firebase解决方案。