2016-05-20 13 views
5

Nella versione precedente di Firebase possiamo ottenere token autenticato per la condivisione tra la nostra app, le estensioni.Come condividere il token di autenticazione tra l'app in Firebase 3.0?

Ma quando si aggiorna a Firebase 3.0, quella funzione non funziona più. Ho usato getTokenWithCompletion: su FIRUser, quindi nella mia estensione per app chiamo signInWithCustomToken: completamento: con token appena ottenuto. Ma Firebase restituisce un errore con messgage:

errore di dominio = Codice FIRAuthErrorDomain = 17000 "Il formato token personalizzato è errato Si prega di verificare la documentazione.". UserInfo = 0x799b6010 {error_name = ERROR_INVALID_CUSTOM_TOKEN, NSLocalizedDescription = Il formato di token personalizzato non è corretto. Controllare la documentazione.}

Come ottenere un token autenticato da FIRUser per riattivarlo nell'estensione per l'app?

+0

Cross-post: https://groups.google.com/forum/#!topic/firebase-talk/R4YUKBpn2lY –

+0

Ho anche lo stesso problema .. :( –

risposta

2

Ho avuto lo stesso problema stamattina durante l'aggiornamento all'ultima versione di Firebase su Android. Per risolvere il problema, ho dovuto aggiornare l'SDK del server Firebase alla versione 3.0+

Questa è un'implementazione del back-end Java, ma lo stesso vale per NodeJS.

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

Nel nuovo Firebase Server SDK si deve inizializzare la vostra applicazione Firebase prima utilizzando un file JSON generato. (Che si trova sotto i permessi nella vostra nuova console Firebase) Quindi è possibile generare il token 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"); 

Un token generato in questo modo ha funzionato mi ha permesso di utilizzare il metodo nuova signInWithCustomToken().

Si può leggere di più qui: https://firebase.google.com/docs/auth/server

Spero che questo aiuti

4

signInWithCustomToken è destinato a essere utilizzato con i propri gettoni coniate sul proprio server (leggi tutto here).

Il modo migliore per avviare una sessione tra diversi componenti dell'applicazione sarà, al momento dell'accesso, condividere le credenziali dell'utente ed eseguire il bootstrap tra tutti i componenti.

Ad esempio, se si utilizza il token di accesso di Facebook con lo Facebook login, è necessario condividerlo dall'app all'estensione, quindi chiamare signInWithCredential con lo stesso token sia nell'app che nell'app principale.

Attualmente non esiste un modo per accedere a un utente in un'app Firebase con gli SDK v3.X da un'altra istanza di app Firebase.

+0

Che dire di autenticazione guest ?, come posso condividere credenziali per la mia estensione per app? –

+2

Questo non è attualmente supportato nativamente dall'SDK, sfortunatamente, anche se è nella lista delle cose che vogliamo supportare nel breve termine). La mia migliore raccomandazione a questo punto sarebbe quella di continuare a utilizzare gli SDK v2.X se questa è una funzionalità fondamentale per l'applicazione e non è possibile risolvere questo problema in un altro modo. – alfongj

+0

Da una prospettiva web/js almeno sembra possibile utilizzare l'SDK v2 per l'accesso iniziale e quindi utilizzare tale token tramite il REST 'https://auth.firebase.com/v2/ {namespace}/sessions' per ottenere un altro token che funzioni con gli SDK v3.x in 'signInWithCustomToken'. L'ho trovato tramite https://github.com/firebase/firebase-auth-migration-helpers. Qualsiasi nuovo/piani dove votare o seguire su questo problema @alfongj? (consentendo solo il passaggio di un token da "app signon" ad altre parti dell'applicazione (web, rest api, ecc.) –

2

Ho avuto lo stesso errore dell'OP. Suppongo che tu stia utilizzando un account email di servizio e una chiave privata durante la generazione di token sul tuo server. Il token generato dal mio server ha avuto esito positivo su http://jsfiddle.net/firebase/XDXu5/. Tuttavia, la mia app darebbe lo stesso errore.

Alla fine, si è scoperto che stavo firmando utilizzando "HS256" (che è quello che stavo usando nella mia generazione di token esistente - pre Firebase 3.0). Quando ho cambiato in "RS256", invece, il token generato funziona nell'app.

Spero che questo aiuti.