2012-02-21 3 views
2

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

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

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

Я добавил колонку «password_digest», который необходим OmniAuth идентичности к моей модели пользователя/таблицы и изменил код модели пользователя

из

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 

, но когда я это делаю, код в модели авторизации, которая создает модели User и Authorization, не работает должным образом. Когда модель пользователя простирается от 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 

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

ActiveRecord::UnknownAttributeError 
unknown attribute: password 

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

ответ

1

пытаются добавить attr_accessor: пароль и может быть attr_accessor: электронная почта

3

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

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

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

+0

У вас есть хранилище GitHub, показывающие файлы из вашего учебника в контексте? Я не могу понять, должны ли они быть интегрированы в файлы из RailsCast или если они предназначены только для одиночества. Например, new.html.erb ... где это происходит? Извините, если это проблемы noob-ish, но я могу использовать некоторые пояснения. Благодарю. – bergie3000