Onmiauth-Facebook не сохраняет facebook_id в таблицу пользователей - PullRequest
2 голосов
/ 14 декабря 2011

Я запустил bundle exec rake db: migrate и имею 2 базы данных. Я также использую SQLite в разработке. Я получаю следующую ошибку при переходе на http://localhost:3000/auth/facebook:

You have a nil object when you didn't expect it! You might have expected an instance of Array. The error occurred while evaluating nil.[]

Он указывает на этот код в app / controllers / session_controller.rb: 12: в `create ' :

    def create
      auth_hash = request.env['omniauth.auth']

      @authorization = Authorization.find_by_provider_and_uid(auth_hash["provider"], auth_hash["uid"])
      if @authorization
        render :text => "Welcome back #{@authorization.user.name}! You have already signed up."
      else
######line 12->  user = User.new :name => auth_hash["user_info"]["name"], :email => auth_hash["user_info"]["email"]
        user.authorizations.build :provider => auth_hash["provider"], :uid => auth_hash["uid"]
        user.save

        render :text => "Hi #{user.name}! You've signed up."
      end
    end

Я думаю, это означает, что мой массив информации пуст и сводит меня к тому, что данные не сохраняются в моей базе данных.

Кстати, я на шаге 6 после http://net.tutsplus.com/tutorials/ruby/how-to-use-omniauth-to-authenticate-your-users/

1 Ответ

2 голосов
/ 29 декабря 2011

Хорошо.Я думаю, я вижу, где этот пример пошёл наперекосяк.Пример, который используется на вышеуказанном сайте, использует предыдущую версию omniauth, которая использовала «user_info» в качестве имени хеша.Новая версия omniauth 1.0 изменила это имя на «info» и разделила стратегии провайдеров на отдельные гемы, поэтому вы должны указать их отдельно в своем Gemfile (например: omniauth-facebook, omniauth-twitter и т. Д.).Таким образом, вы больше не используете просто драгоценный камень «omniauth» в Gemfile.

https://github.com/intridea/omniauth/wiki/Upgrading-to-1.0

...