2017-05-14 37 views
2

我有一個iOS Firebase應用程序,支持Twitter登錄,但偶爾signIn(with: credential調用隨機失敗,我不明白爲什麼。iOS錯誤與Firebase Auth登錄使用Twitter憑據

首先用戶使用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獲取VERIFY_CREDENTIAL。」但我找不到任何解決方案。我發現了一些我認爲是日文的帖子,但我無法理解他們的解決方案。

我甚至看了看這裏的iOS重火力驗證錯誤 https://firebase.google.com/docs/auth/ios/errors 但錯誤鍵FIRAuthErrorUserInfoDeserializedResponseKey甚至不列爲可能錯誤signInWithCredential:completion:

+0

我在Web上使用Firebase時遇到了同樣的錯誤:「從TWITTER獲取VERIFY_CREDENTIAL時出現網絡錯誤。」它也只是「偶爾」發生,並且似乎對某些Twitter用戶比其他用戶多。我甚至嘗試實現我自己的auth後端函數,直接從Twitter獲取auth令牌和祕密,使用它們登錄,如下所示:var credentials = firebase.auth.TwitterAuthProvider.credential(token,secret); firebase.auth()。signInWithCredential(憑證);'但它沒有幫助。 – pejalo

+0

現在使用Firebase至少2個月。 Firebase說這不是他們。 Twitter沒有迴應。其他使用Twitter Auth w Firebase的現有應用程序正常運行。與此同時,作爲一個不穩定但唯一的解決方法,我正在實施具有一定時間延遲的3重試邏輯。即使這樣,它也會清除大約50%的時間... – SteveSeow

回答

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) 
 
     \t .then(result => { 
 
     \t \t console.log('success') 
 
     \t \t console.log(result.user) 
 
     \t }) 
 
     \t .catch(err => { 
 
     \t console.log('failure') 
 
     \t console.log(err.message) 
 
     }) 
 
    }); 
 
}); 
 
</script>

火力地堡支持建議的原因是由於不可靠的Twitter的終點,但沒有任何提示的解決方案。

使用Firebase 2.3.2的較舊項目不會複製該錯誤,這表明應該爲我提供Firebase解決方案。

+0

看起來這已被Twitter所修復。任何人仍然看到錯誤? – mosse