2010-03-08 1 views
8

У меня есть приложение, сконфигурированный с authlogic и authlogic_facebook_connect, но каждый раз, когда я нажимаю на кнопку «Connect», мой UserSession не проходит проверку, говоря: «Вы не предоставили никаких сведений для проверки подлинности»Authlogic Facebook Connect Snafu

ISN» t authlogic_facebook_connect должен обходить аутентификацию входа/пароля? Я пропустил какой-то шаг конфигурации?

Любая помощь будет оценена!

+0

Вы попали куда-нибудь с этим? – Codebeef

+0

Нет, когда я вернусь к нему, я собираюсь попробовать http://github.com/GICodeWarrior/authlogic_facebook вместо http://github.com/kalasjocke/authlogic_facebook_connect. Надеюсь, что в долгосрочной перспективе это будет лучше работать , – a10s

ответ

2

Эй, может быть, я могу помочь в этом, просто была эта проблема не очень давно ...

Facebook подключения устарела. Все классные дети теперь используют Facebook Graph с OAuth. Команда Facebook даже закрыла документацию для Facebook Connect.

В любом случае, что касается Authlogic Facebook connect, он просто больше не работает.

В конце концов, я продолжал использовать Authlogic для обычного входа и управления учетными записями, но для подключения к Facebook я написал свой собственный код.

Скорее всего, вы могли использовать драгоценный камень facebooker. Удалите этот жемчуг, но сохраните файл config/facebooker.yml.

Попробуйте это:

  1. 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

  2. Добавьте этот код внутри 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. Добавить метод найти внутри вашей модели пользователя (приложение/модели/пользователя.Р.Б.):
 
     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. Добавить ссылку на действия create_facebook в представлении, что-то вроде

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

Объяснение

  1. На первом этапе вы создали файл для получения данных конфигурации из facebooker.yml
  2. На втором этапе вы в основном создали две функции: одну для отправки пользователя на сайт facebook (create_facebook), а другую для сбора данных обратного вызова (facebook_oauth_callback) идея исходила из этой страницы: http://www.wisejive.com/2010/05/facebook-oauth-on-rails.html
  3. На третьем этапе вы просто добавили метод внутри модели пользователя, чтобы найти или создать новый, если не найти, пользователя на основе информации, возвращенной из facebook.

Код работает только с моим проектом, а не только скопируйте его, а изучите его по очереди. Со временем я понял, что лучше использовать простой код, который вы можете понять, а не использовать сложный плагин другого, который вы не можете исправить, когда что-то пойдет наперекосяк ...

+0

Спасибо jaycode, теперь я использую OAuth2, что не вызывало у меня никаких проблем. – a10s

+0

Не беспокойтесь, рад, что это сработало :) – jaycode

0

Я имел эту проблему, я думаю моя проблема была в моем вызове

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

ноте я должен был передать в контроллер. Я думаю, что это было мое решение, так или иначе, еще раз удалил еще одну проблему дальше, когда я аутентифицирую OK с помощью facebook, но каждый раз создаёт нового пользователя на моем сайте.