Omniauth Facebook Auth + идентичность, используя ту же модель вместо двух - PullRequest
2 голосов
/ 22 февраля 2012

Я настроил Omniauth Facebook аутентификацию согласно этому уроку: http://net.tutsplus.com/tutorials/ruby/how-to-use-omniauth-to-authenticate-your-users/ И теперь я пытаюсь объединить его с omniauth-identity, используя ту же модель User вместо отдельной модели Identity, как в этом учебном пособии: http://railscasts.com/episodes/304-omniauth-identity?view=asciicast, но я не могу заставить ее работать должным образом.

Это мой файл инициализаторов / omniauth.rb:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, 'xxxxx', 'xxxxx'
  provider :identity, :fields => [:email], :model => User
end

Я добавил столбец «password_digest», который необходим omniauth-identity, в мою модель / таблицу User и изменил код модели User

от

class User < ActiveRecord::Base
  has_many :authorizations
  #validates :name, :email, :presence => true

  def add_provider(auth_hash)
    # check if the provider already exists, so we don't add it twice
    unless authorizations.find_by_provider_and_uid(auth_hash["provider"], auth_hash["uid"])
      Authorization.create :user => self, :provider => auth_hash["provider"], :uid => auth_hash["uid"], :token => auth_hash["token"]
    end
  end
end

до

class User < OmniAuth::Identity::Models::ActiveRecord
  ...
end

но когда я это делаю, код в модели авторизации, которая создает модели пользователя и авторизации, не работает должным образом Когда пользовательская модель расширяется от ActiveRecord :: Base, записи создаются просто отлично, но когда я расширяю пользовательскую модель из OmniAuth :: Identity :: Models :: ActiveRecord, пользовательская модель не сохраняется в базе данных при создании новой авторизации.

Это код модели авторизации:

class Authorization < ActiveRecord::Base
  belongs_to :user
  validates :provider, :uid, :presence => true

  def self.find_or_create(auth_hash)
    unless auth = find_by_provider_and_uid(auth_hash["provider"], auth_hash["uid"])
      user = User.create :name => auth_hash["info"]["name"], :email => auth_hash["info"]["email"]
      auth = create :user => user, :provider => auth_hash["provider"], :uid => auth_hash["uid"], :token => auth_hash["credentials"]["token"]
    end

    auth
  end
end

Когда я расширяю модель User из ActiveRecord :: Base и пытаюсь создать новую регистрацию с Identity, я получаю эту ошибку:

ActiveRecord::UnknownAttributeError
unknown attribute: password

Есть ли способ заставить это работать таким образом? Я не знаю, что делать сейчас.

Ответы [ 2 ]

3 голосов
/ 24 сентября 2012

не уверен, что у вас все еще есть проблема, но, возможно, кто-то из interwebz найдет.

Я только что опубликовал решение по блогу, должен решить ваши проблемы:

http://bernardi.me/2012/09/using-multiple-omniauth-providers-with-omniauth-identity-on-the-main-user-model/

1 голос
/ 13 марта 2012

попробуйте добавить attr_accessor: пароль и может быть attr_accessor: email

...