2016-05-20 40 views
5

在較早版本的Firebase中,我們可以獲取經過身份驗證的令牌,以便在我們的應用和擴展程序之間共享。如何在Firebase 3.0中的應用程序之間共享身份驗證令牌?

但是,當升級到Firebase 3.0時,該功能不再起作用。 我已經使用getTokenWithCompletion:在FIRUser上,然後在我的應用程序擴展中調用signInWithCustomToken:完成:使用我剛剛獲得的令牌。但火力地堡返回一個錯誤與messgage:

錯誤域= FIRAuthErrorDomain代碼= 17000「自定義令牌格式不正確 請查看文檔。」 UserInfo = 0x799b6010 {error_name = ERROR_INVALID_CUSTOM_TOKEN,NSLocalizedDescription = 自定義令牌格式不正確。請檢查文檔。}

如何從FIRUser獲取身份驗證令牌以在我的應用擴展中重新驗證身份?

+0

交叉帖子:https://groups.google.com/forum/#!topic/firebase-talk/R4YUKBpn2lY –

+0

我也得到同樣的問題.. :( –

回答

2

今天早上我在升級到最新版本的Firebase時遇到了同樣的問題。 要解決此問題,我必須將Firebase Server SDK更新至版本3.0以上版本

這是一個Java後端實現,但同樣適用於NodeJS。

<dependency> 
    <groupId>com.google.firebase</groupId> 
    <artifactId>firebase-server-sdk</artifactId> 
    <version>[3.0.0,)</version> 
</dependency> 

在新的火力地堡服務器SDK你必須先使用生成的JSON文件。(你在新的火力地堡控制檯下的權限實測),初始化你的火力地堡的應用程序,然後就可以生成JWT令牌。

FirebaseOptions options = new FirebaseOptions.Builder() 
       .setServiceAccount(new FileInputStream("path/to/json/file.json")) 
       .setDatabaseUrl("https://myapp.firebaseio.com/") 
       .build(); 

FirebaseApp.initializeApp(options); 

String token = FirebaseAuth.getInstance().createCustomToken("userID"); 

以這種方式生成的令牌使我可以使用新的signInWithCustomToken()方法。

你可以在這裏閱讀更多:https://firebase.google.com/docs/auth/server

希望這有助於

4

signInWithCustomToken是爲了與鑄造自己的服務器上自己的令牌使用(閱讀更多here)。

在應用程序的不同組件之間引導會話的最佳方式是在登錄時共享用戶的憑據並在所有組件中執行引導。

例如,如果您使用Facebook login,當您檢索Facebook訪問令牌時,您必須將其從您的應用程序共享到您的擴展,然後在主應用程序和擴展中使用相同的令牌調用signInWithCredential。

目前沒有辦法通過另一個Firebase應用程序實例將用戶登錄到Firebase應用程序與v3.X SDK。

+0

客人認證如何?,我怎麼可以分享我的應用程序擴展的憑據? –

+2

不幸的是,它目前本身不受SDK的支持 - 儘管它在我們希望在短期內支持的事情列表中)。此時我最好的建議是繼續使用v2.X SDK,如果這是對您的應用程序至關重要的功能,並且您無法以其他方式解決此問題。 – alfongj

+0

從web/js的角度來看,至少似乎可以使用v2 SDK進行初始登錄,然後通過REST的'https://auth.firebase.com/v2/ {namespace}/sessions'使用該標記獲取另一個可用於'signInWithCustomToken'中的v3.x SDK的令牌。 我通過https://github.com/firebase/firebase-auth-migration-helpers發現了這個。 任何新的/計劃在哪裏投票或關注此問題@alfongj? (只允許從'應用程序登錄'傳遞一個令牌給應用程序的其他部分(web,rest api等)) –

2

我有和OP一樣的錯誤。我假設您在服務器上的令牌生成期間使用服務帳戶電子郵件和私鑰。我的服務器生成的令牌在http://jsfiddle.net/firebase/XDXu5/上成功。但是,我的應用程序會給出同樣的錯誤。

最後,事實證明我使用「HS256」(這是我在現有令牌生成中使用的內容 - pre firebase 3.0)對它進行簽名。當我將其改爲「RS256」時,生成的令牌在應用程序中起作用。

希望有所幫助。

相關問題