2010-03-08 22 views
8

Tengo una aplicación configurada con authlogic y authlogic_facebook_connect, pero cada vez que haga clic en el botón "Conectar", mi UserSession no pasa la validación, diciendo "Usted no proporcionó ningún detalle para la autenticación"Authlogic Facebook Connect Snafu

Isn' ¿Se supone que authlogic_facebook_connect omite la autenticación de inicio de sesión/contraseña? ¿Me falta algún paso de configuración?

¡Cualquier ayuda sería apreciada!

+0

¿Llegaste a algún lado con esto? – Codebeef

+0

No, cuando vuelva a intentarlo, intentaré http://github.com/GICodeWarrior/authlogic_facebook en lugar de http://github.com/kalasjocke/authlogic_facebook_connect Espero que eso funcione mejor a la larga. . – a10s

Respuesta

2

Hey, tal vez pueda ayudar en esto, acaba de tener este problema no hace mucho tiempo ...

Facebook Connect es obsoleta. Todos los chicos geniales ahora están usando Facebook Graph con OAuth. El equipo de Facebook incluso ha cerrado la documentación de Facebook Connect.

De todos modos, eso se aplica a Authlogic Facebook connect, simplemente ya no funciona.

Al final, seguí usando Authlogic para el inicio de sesión normal y la administración de la cuenta, pero para la conexión de Facebook escribí mi propio código.

Es probable que haya usado facebooker gem. Desinstale esa gema, pero mantenga el archivo config/facebooker.yml.

Prueba esto:

  1. seguir usando config/facebooker.yml añadiendo este código dentro de config/inicializadores/load_config.rb (lo necesario para crear este archivo)

    config = YAML.load_file("#{Rails.root}/config/facebooker.yml") || {}

    facebook_config = config['common'] || {}

    facebook_config.update(config[Rails.env] || {})

    FB_CONFIG = facebook_config.symbolize_keys

  2. añadir este código dentro de su user_controller.rb:

 
def facebook_oauth_callback 
    if not params[:code].nil? 
    callback = url_for(:host => APP_CONFIG[:host], :controller => 'gallery/user', :action => 'facebook_oauth_callback') 
    url = URI.parse("https://graph.facebook.com/oauth/access_token?client_id=#{FB_CONFIG[:application_id]}&redirect_uri=#{callback}&client_secret=#{FB_CONFIG[:secret_key]}&code=#{CGI::escape(params[:code])}") 
    http = Net::HTTP.new(url.host, url.port) http.use_ssl = (url.scheme == 'https') tmp_url = url.path + "?" + url.query 
    request = Net::HTTP::Get.new(tmp_url) 
    response = http.request(request) 
    data = response.body 
    access_token = data.split("=")[1] 
    if access_token.blank? 
     flash[:notice] = 'An error occurred while connecting through Facebook, please try again later.' 
    else 
     url = URI.parse("https://graph.facebook.com/me?access_token=#{CGI::escape(access_token)}") 
     http = Net::HTTP.new(url.host, url.port) 
     http.use_ssl = (url.scheme == 'https') 
     tmp_url = url.path + "?" + url.query 
     request = Net::HTTP::Get.new(tmp_url) 
     response = http.request(request) 
     user_data = response.body 
     user_data_obj = JSON.parse(user_data) 
     @user = User.new_or_find_by_facebook_oauth_access_token(access_token, {:user_data => user_data_obj}) 

     if @user.new_record? 
     session[:user] = @user 
     session[:external_app] = "Facebook" 
     redirect_to(:action => 'new_details') 
     else 
     user_session = UserSession.create(@user) 
     flash[:notice] = "Successfully logged in." 
     redirect_back_or_default root_url 
     end 
    end 
    end 
end 

def create_facebook 
    redirect_to("https://graph.facebook.com/oauth/authorize?client_id=#{FB_CONFIG[:application_id]}&redirect_uri=" + 
    url_for(:host => APP_CONFIG[:host], :controller => 'gallery/user', :action => 'facebook_oauth_callback') + 
    "&scope=email,offline_access") 
end 
  1. Añadir el método de búsqueda dentro de su modelo de usuario (app/modelos/usuario.RB):
 
     def self.new_or_find_by_facebook_oauth_access_token(access_token, options = {}) 
     user = User.find_by_facebook_oauth_access_token(access_token) 
     if user.blank? 
      #code to create new user here 
     end 
     user 
     end 
  1. Añadir enlace a create_facebook acciones de la vista, algo así como

    <%= link_to image_tag('gallery/button-facebook.png', :title => "register with Facebook", :alt => "register with Facebook"), {:action => 'create_facebook'}, {:target => '_parent'} %>

Explicación

  1. En el primer paso creó un archivo para obtener datos de configuración de facebooker.yml
  2. En el segundo paso, básicamente creó dos funciones, una para enviar al usuario al sitio de Facebook (create_facebook) y otra para capturar los datos de devolución de llamada (facebook_oauth_callback) la idea era de esta página: http://www.wisejive.com/2010/05/facebook-oauth-on-rails.html
  3. en tercer paso, que acaba de añadir un método en el interior modelo de usuario para encontrar o crear nuevos si no se encuentra, un usuario en base a la información de regresar de facebook.

El código solo funciona en mi proyecto, no solo copie y pegue, sino que apúntelo línea por línea. Con el tiempo me di cuenta de que es mejor usar un código simple que puedas entender en lugar de usar el complemento complicado de otro que no puedes arreglar cuando las cosas van mal ...

+0

Gracias jaycode, estoy usando OAuth2 ahora, lo que no me dio ningún problema en absoluto. – a10s

+0

Sin preocupaciones, me alegro de que funcionó :) – jaycode

0

he tenido este problema, yo creo mi problema estaba en mi llamada a

<%= authlogic_facebook_login_button :controller => 'account', :js => :jquery %> 

nota que tenía que pasar en el controlador. Creo que esta fue mi solución de todos modos, me encontré con otro problema más adelante, donde estoy autenticando bien con Facebook, pero está creando un nuevo usuario en mi sitio cada vez.

Cuestiones relacionadas