Эй, может быть, я могу помочь в этом, просто была эта проблема не очень давно ...
Facebook подключения устарела. Все классные дети теперь используют Facebook Graph с OAuth. Команда Facebook даже закрыла документацию для Facebook Connect.
В любом случае, что касается Authlogic Facebook connect, он просто больше не работает.
В конце концов, я продолжал использовать Authlogic для обычного входа и управления учетными записями, но для подключения к Facebook я написал свой собственный код.
Скорее всего, вы могли использовать драгоценный камень facebooker. Удалите этот жемчуг, но сохраните файл config/facebooker.yml.
Попробуйте это:
Keep с помощью конфигурации/facebooker.yml путем добавления этого кода внутри конфигурации/инициализаторах/load_config.rb (вам нужно создать этот файл)
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
Добавьте этот код внутри 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
- Добавить метод найти внутри вашей модели пользователя (приложение/модели/пользователя.Р.Б.):
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
Добавить ссылку на действия create_facebook в представлении, что-то вроде
<%= link_to image_tag('gallery/button-facebook.png', :title => "register with Facebook", :alt => "register with Facebook"), {:action => 'create_facebook'}, {:target => '_parent'} %>
Объяснение
- На первом этапе вы создали файл для получения данных конфигурации из facebooker.yml
- На втором этапе вы в основном создали две функции: одну для отправки пользователя на сайт facebook (create_facebook), а другую для сбора данных обратного вызова (facebook_oauth_callback) идея исходила из этой страницы: http://www.wisejive.com/2010/05/facebook-oauth-on-rails.html
- На третьем этапе вы просто добавили метод внутри модели пользователя, чтобы найти или создать новый, если не найти, пользователя на основе информации, возвращенной из facebook.
Код работает только с моим проектом, а не только скопируйте его, а изучите его по очереди. Со временем я понял, что лучше использовать простой код, который вы можете понять, а не использовать сложный плагин другого, который вы не можете исправить, когда что-то пойдет наперекосяк ...
Вы попали куда-нибудь с этим? – Codebeef
Нет, когда я вернусь к нему, я собираюсь попробовать http://github.com/GICodeWarrior/authlogic_facebook вместо http://github.com/kalasjocke/authlogic_facebook_connect. Надеюсь, что в долгосрочной перспективе это будет лучше работать , – a10s