Ruby on Rails: Authlogic Facebook integración: Enlace cuentas con la entrada del usuario en lugar de utilizar automáticamente la dirección de correo electrónico

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

Pregunta

Estoy desarrollando una aplicación web en Ruby on Rails. Estoy usando authlogic hacer autenticación. Mi sitio tiene sus propias conexiones, pero espero también utilizar Facebook. Probé authlogic_facebook_connect (usando Facebooker). Después de un montón de contratiempos (los documentos en realidad no han sido plenamente mantenido), me hizo llegar a authlogic_facebook_connect trabajo y que está bien. El comportamiento por defecto "conectar" funciona perfectamente cuando me enfrento a los usuarios que nunca han usado por el sitio antes, pero da lugar a una gran cantidad de nombres de usuario duplicados para las personas que están utilizando diferentes direcciones de correo electrónico de Facebook y para mi sitio. Esto es lo que quiero:

Cuando el usuario pulsa el botón de Facebook "Conectar" (y después de ir a través del paso de autenticación de Facebook de hacer clic en 'Permitir'), quiero un cuadro de pop-up preguntando al usuario si desea conectarse a un pre-existente cuenta en mi sitio o si quieren tener una cuenta generada automáticamente para ellos.

Si quieren que genera automáticamente para ellos, estamos bien y se procede de forma normal, pero si - por el contrario - que quieren vincular su cuenta de Facebook con una cuenta en mi sitio, en realidad ellos quieren para entrar en sus credenciales locales y encontrar la cuenta correcta. En otras palabras, I no que mi solución a la figura automáticamente qué cuenta se parece a la derecha, yo quiero que el usuario haga esto.

¿Hay algún plugin de corte gema / / rápida que me permitirá sacar esto adelante, ya sea usando authlogic_facebook_connect o OAuth o algo más?

- David

¿Fue útil?

Solución

Someone else may be able to point you at the perfect gem for this, but I can tell you that I've worked on a similar problem and it wasn't much work to roll our own, based on the oauth2 gem.

Here's a sketch of the code/flow I use.

1) User clicks on 'Connect to Facebook' and this sends you to an action like this

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) User goes over to facebook and gives you all the access you want, then facebook calls the callback you specified facebook_callback_url which should take you to an action like this:

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

Then you can specify whatever you want in do_my_custom_user_association, you should have a current_user available from authlogic if someone is logged in, so you can redirect to a flow that lets the logged in user select if they want to merge into their current account or a different one. If there's no current user, you can send them to a create account flow, with some facebook data attached.

Note that this is just a sketch, there are error cases to handle (e.g. facebook_callback will be hit with the param error_reason if the get_acccess_token fails) and I'm not recommending you do all the oauth2 interaction right in your controller, but the basic idea is there.

See http://developers.facebook.com/docs/authentication/ if any of the oauth2 interactions don't make sense.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top