2015-02-07 4 views
2

У меня возникает проблема с аутентификацией Omniauth и Rails 4, в результате чего я получаю Rails ActiveModel :: ForbiddenAttributesError.Rails ActiveModel :: ForbiddenAttributesError Devise, Omniauth

Я использую gem 'protected_attributes', поэтому сильные параметры не должны быть проблемой.

Моя модель пользователя содержит следующее:

def self.from_omniauth(auth) 
    where(auth.slice(:provider, :uid)).first_or_create do |user| 
     user.username = auth.info.email 
     user.email = auth.info.email 
     user.password = Devise.friendly_token[0,20] 
     user.name = auth.info.name 
    end 
    end 

user.password находится там только для поддержания совместимости с существующей системой DEViSE AUTH.

Ошибка AR указывает, что эта строка: where(auth.slice(:provider, :uid)).first_or_create do |user| выдает ошибку.

выше метод вызывается из:

class OmniauthCallbacksController < Devise::OmniauthCallbacksController 
    def mavenlink 
    @user = User.from_omniauth(request.env['omniauth.auth']) 
    service = @user.services.initialize_or_update_via_omniauth(request.env['omniauth.auth']) 
    if service && service.save 
     sign_in_and_redirect @user #this will throw if @user is not activated 
     set_flash_message(:notice, :success, :kind => "Mavenlink") if is_navigational_format? 
    else 
     redirect_to root_path, error: "Error signing in with Mavenlink credentials." 
    end 
    end 
end 

ли это связано или нет, я не уверен, но я также был запущен эту ошибку:

Не удалось найти действительный отображение для пути "/ auth/mavenlink/callback"

Возможно, не связано, но я думал, что включу его на всякий случай.

Любая помощь была бы принята с благодарностью!

+0

Измените эту строку на 'where (provider: auth.provider, uid: auth.uid) .first_or_create do | user |'. Это должно делать свое дело. –

+0

Это сделало трюк, спасибо! Почему это проблема? – Adam

+0

Возможный дубликат [Rails 4.1.5 omniauth strong parameters] (http://stackoverflow.com/questions/25399414/rails-4-1-5-omniauth-strong-parameters) – zhurora

ответ

12

У меня была такая же проблема несколько недель назад, и она была исправлена, изменив приведенную ниже строку. По сути, вы должны явно передать параметры в свой запрос.

where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 

Об этом можно узнать по номеру Devise issue.

+0

Спасибо Джастину, это действительно помогает. Но я до сих пор не понимаю, почему этот вопрос не проявился в развитии localhost, но только начал появляться в Heroku. – user3512640