Ruby on Rails: Authlogic Facebook integrazione: i conti di collegamento con l'input dell'utente, invece di utilizzare automaticamente indirizzo e-mail

StackOverflow https://stackoverflow.com/questions/4512277

Domanda

sto sviluppando una web app in Ruby on Rails. Sto utilizzando Authlogic di fare l'autenticazione. Il mio sito ha i propri dati di accesso, ma spero di utilizzare anche Facebook. Ho provato authlogic_facebook_connect (usando Facebooker). Dopo un sacco di singhiozzo (i documenti non hanno davvero stato completamente tenuto il passo), ho fatto arrivare authlogic_facebook_connect al lavoro ed è OK. Il comportamento di default "connect" funziona perfettamente quando mi trovo di fronte a utenti che non hanno mai utilizzati da sito prima, ma si traduce in un sacco di accessi duplicati per le persone che utilizzano diversi indirizzi e-mail per Facebook e per il mio sito. Ecco quello che voglio:

Quando l'utente preme il pulsante di Facebook "Connect" (e dopo che passare attraverso l'autenticazione fase Facebook di click 'Consenti'), voglio una scatola di pop-up che chiede all'utente se vogliono connettersi a un pre-esistente conto sul mio sito o se vogliono avere un account automaticamente generato per loro.

Se lo vogliono generato automaticamente per loro, stiamo bene e si procede come normale, ma se - d'altra parte - vogliono collegare il loro account di Facebook per un account sul mio sito, io in realtà li voglio per entrare nelle loro credenziali locali e trovare l'account corretto. In altre parole, I non voglio la mia soluzione per capire automaticamente che rappresentano assomiglia a quella giusta, voglio l'utente a fare questo.

C'è qualche gemma / plugin / mod veloce che mi permetterà di tirare fuori questo sia utilizzando authlogic_facebook_connect o OAuth o qualcos'altro?

- David

È stato utile?

Soluzione

Qualcun altro potrebbe essere in grado di puntare al gioiello perfetto per questo, ma posso dirvi che ho lavorato su un problema simile e non era molto lavoro per rotolare la nostra, basata sulla gemma OAuth2.

Ecco uno schizzo del codice / flusso che uso.

1) L'utente fa clic su 'Connect to Facebook' e questo ti manda a un'azione del genere

def to_facebook
    options = {
      :redirect_uri => facebook_callback_url,
      :scope => "email,publish_stream" # whatever you want to do
    }
    client = OAuth2::Client.new(FACEBOOK_API_KEY, FACEBOOK_API_SECRET, :site => FACEBOOK_API_SITE)

    redirect_to client.web_server.authorize_url(options)
end

2) L'utente va oltre i tuoi amici e ti dà tutti l'accesso desiderato, quindi facebook chiama la callback specificato facebook_callback_url che dovrebbe prendere di un'azione in questo modo:

def facebook_callback
    client = OAuth2::Client.new(FACEBOOK_API_KEY, FACEBOOK_API_SECRET, :site => FACEBOOK_API_SITE)
    access_token = client.web_server.get_access_token(params[:code], :redirect_uri => facebook_callback_url)

    do_my_custom_user_association(access_token)
end

Quindi è possibile specificare quello che vuoi in do_my_custom_user_association, si dovrebbe avere un current_user disponibili da Authlogic se qualcuno è connesso, in modo da poter reindirizzare ad un flusso che permette l'utente collegato selezionare se vogliono fondersi in conto corrente o uno diverso. Se non c'è utente corrente, è possibile inviare a un flusso di creare un account, con alcuni dati di Facebook allegati.

Si noti che questo è solo un abbozzo, ci sono casi di errore a maniglia (ad esempio facebook_callback sarà colpito con il error_reason param se il get_acccess_token fallisce) e non sto raccomandando di fare tutto l'OAuth2 interazioni direttamente nel tuo controller, ma l'idea di base c'è.

http://developers.facebook.com/docs/authentication/ eventuali del OAuth2 interazioni non hanno senso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top