Эй, может быть, я могу помочь с этим, просто была эта проблема не так давно ...
Подключение к Facebook устарело. Все классные дети теперь используют Facebook Graph с OAuth. Команда Facebook даже закрыла документацию для Facebook Connect.
В любом случае, это касается подключения Authlogic Facebook, оно просто больше не работает.
В итоге я продолжал использовать Authlogic для обычного входа в систему и управления учетными записями, но для подключения к Facebook я написал свой собственный код.
Скорее всего, вы использовали драгоценный камень facebooker. Удалите этот драгоценный камень, но сохраните файл config / facebooker.yml.
Попробуйте это:
Продолжайте использовать config / facebooker.yml, добавив этот код в config / initializers / 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
- Добавить метод поиска внутри вашей модели пользователя (app / models / user.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
Добавить ссылку на действие 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
- На третьем шаге вы просто добавили метод внутри модели User, чтобы найти или создать нового, если он не найден, пользователя на основе информации, возвращенной из facebook.
Код работает только в моем проекте, не просто скопируйте и вставьте его, но изучите его построчно. Со временем я понял, что лучше использовать простой код, который вы можете понять, чем использовать сложный плагин другого, который вы не можете исправить, когда дела идут плохо ...