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:
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
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
- 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
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
- En el primer paso creó un archivo para obtener datos de configuración de facebooker.yml
- 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
- 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 ...
¿Llegaste a algún lado con esto? – Codebeef
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