2012-05-25 17 views
7

Gli utenti della mia applicazione Rails può autenticare in uno di questi 2 modi:Autenticazione tramite Facebook tramite Rails API

  • Usando il loro account Facebook
  • Utilizzando la nostra propria autenticazione

sto usando Facebook SDK su Android e devise e omniauth su Rails.

Come autenticarmi con la mia app Rails su Android in modo da poter recuperare le informazioni di cui ho bisogno dal server?

NB: ho notato che questa domanda sta ottenendo un buon numero di visualizzazioni di recente. Si prega di non seguire il consiglio dato in questo thread troppo da vicino - il web si muove velocemente e risale a 3 anni fa!

risposta

2

Questo può essere fatto usando la gemma fb_graph (non fbgraph!).

Si può solo aggiungere al tuo Gemfile e fare

user = FbGraph::User.me(token).fetch 

dove token è il token OAuth avete ottenuto utilizzando, per esempio, il Facebook SDK su Android. user.email sarà l'indirizzo email dell'utente (se si impostano le autorizzazioni necessarie).

È possibile utilizzare questo URL per i test:

https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token 
+1

Basta notare che questa risposta ha avuto un po 'di attenzione. Tieni presente che questo era di 2,5 anni fa e molte cose potrebbero essere cambiate da allora. Stai attento a ciò che prendi da questo! –

0

Ciò dipende totalmente da come funziona il sistema di autenticazione. Dovrai creare un'API sul tuo server per gestire le comunicazioni dall'app Android e passare le informazioni tra entrambi utilizzando l'API.

+0

Io uso ideare e omniauth, che è più o meno come funziona. Per il lato Android, utilizzo l'SDK di Facebook. –

+0

L'SDK di Facebook verrà autorizzato solo con Facebook. Dovrai creare una libreria Android che si autenticherà con il tuo sito web Rails. Questo è l'unico modo per recuperare le informazioni dal server in modo sicuro. –

+0

Il mio server esegue l'autenticazione con Facebook tramite Omniauth.Mi chiedevo se potevo usare l'SDK di Facebook per loggare l'utente e quindi fare un 'GET' su' users/auth/facebook' in modo che l'utente potesse essere autenticato anche con il mio server. (questo è confuso? lo riscriverò se non potessi spiegarmi) –

0

Niraj Shah ha perfettamente ragione, anche se la risposta potrebbe non essere abbastanza dettagliata per te. Per una risposta approfondita alla tua domanda, dai uno sguardo allo Securing an API railscast by Ryan Bates che è stato rilasciato solo di recente. Copre l'autenticazione di base HTTP.

Si potrebbe anche voler dare un'occhiata all'opzione più avanzata per proteggere la propria API/fornire agli utenti registrati l'accesso ai propri dati. C'è anche un railscast su questo qui: http://railscasts.com/episodes/353-oauth-with-doorkeeper - anche se è un episodio pro, quindi devi registrarti per guardarlo.

+0

Grazie per i link. Sto usando Devise, però, non l'autenticazione integrata di HTTP. –

+0

L'autenticazione dell'API è disaccoppiata dall'autenticazione degli utenti! In teoria è possibile inviare nome utente/password (o provider + uid - o qualsiasi altra cosa che è possibile utilizzare per identificare univocamente un utente) con ogni richiesta all'API e autenticare contro di esso. Tuttavia, questo è solo cattivo stile (e se lo fai, assicurati di usare SSL!). L'autenticazione usando i token come in OAuth è la strada da percorrere. – emrass

+0

OK, escogitare supporti basati su token, cercherò di passare a quello. Ancora non capisco come dovrei autorizzare un utente che accede con Facebook. –

0

Francisco, ho esattamente lo stesso bisogno.

Lo scenario di idea con token_authenticatable sembra semplice e non dovrebbe essere un problema, ma non sono sicuro che sia il modo migliore per gestire lo scenario di Facebook. Sul lato web, per l'autenticazione FB sto usando omniauth-facebook come documentato qui: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview. Penso che questo usi OAuth con FB come fornitore, quindi è una buona possibilità che l'ultimo RailsCast su doorkeeper che protegge un'API con OAuth dovrebbe fare il trucco. Non l'ho ancora provato, ma lo farò presto a meno che tu non mi batti. Ecco il link: http://railscasts.com/episodes/353-oauth-with-doorkeeper.

+0

Ehi. Pubblicherò presto una risposta alla mia domanda per amore della posteriorità. Quello che devi fare è usare la gemma 'fb_graph' (non' fbgraph'!). Quindi puoi aggiungerlo al tuo gemfile e fare 'user = FbGraph :: User.me (token) .fetch', dove' token' è il token oauth che hai ottenuto usando, ad esempio, l'SDK di Facebook su Android. 'user.email' avrà l'indirizzo e-mail dell'utente (se si impostano le autorizzazioni necessarie). Non esitate a contattarmi se non ero chiaro. –

+0

A scopo di test, è possibile utilizzare 'irb' e' GET' in questa pagina: https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=https://www.facebook.com/connect/login_success. html & response_type = token Se hai avuto successo, verrai reindirizzato a un URI con il token di accesso su di esso. Quindi puoi usare quel token nel modo sopra menzionato. –

+0

eccellente, che funzionerà, grazie! –

Problemi correlati