2013-03-20 11 views
18

Welches Juwel eignet sich am besten für die Authentifizierung in Rails 4 ?? Ich versuche das Gerät zu benutzen, aber ich habe Probleme damit.Rails 4 Authentifizierung

.rvm/gems/ruby-2.0.0-p0/gems/activemodel-4.0.0.beta1/lib/active_model/deprecated_mass_assignment_security.rb:14:in `attr_accessible': `attr_accessible` is extracted out of Rails into a gem. Please use new recommended protection model for params(strong_parameters) or add `protected_attributes` to your Gemfile to use old one. (RuntimeError) 
    from /home/leapfrog/projects/kathloc/app/models/user.rb:8:in `<class:User>' 
    from /home/leapfrog/projects/kathloc/app/models/user.rb:1:in `<top (required)>' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/dependencies.rb:423:in `load' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/dependencies.rb:423:in `block in load_file' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/dependencies.rb:615:in `new_constants_in' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/dependencies.rb:422:in `load_file' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/dependencies.rb:323:in `require_or_load' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/dependencies.rb:462:in `load_missing_constant' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/dependencies.rb:183:in `const_missing' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/inflector/methods.rb:226:in `const_get' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/inflector/methods.rb:226:in `block in constantize' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/inflector/methods.rb:224:in `each' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/inflector/methods.rb:224:in `inject' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/inflector/methods.rb:224:in `constantize' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/dependencies.rb:534:in `get' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/dependencies.rb:565:in `constantize' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/devise-1.5.4/lib/devise.rb:261:in `get' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/devise-1.5.4/lib/devise/mapping.rb:77:in `to' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/devise-1.5.4/lib/devise/mapping.rb:72:in `modules' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/devise-1.5.4/lib/devise/mapping.rb:89:in `routes' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/devise-1.5.4/lib/devise/mapping.rb:156:in `default_used_route' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/devise-1.5.4/lib/devise/mapping.rb:66:in `initialize' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/devise-1.5.4/lib/devise.rb:291:in `new' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/devise-1.5.4/lib/devise.rb:291:in `add_mapping' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/devise-1.5.4/lib/devise/rails/routes.rb:193:in `block in devise_for' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/devise-1.5.4/lib/devise/rails/routes.rb:192:in `each' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/devise-1.5.4/lib/devise/rails/routes.rb:192:in `devise_for' 
    from /home/leapfrog/projects/kathloc/config/routes.rb:2:in `block in <top (required)>' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/actionpack-4.0.0.beta1/lib/action_dispatch/routing/route_set.rb:320:in `instance_exec' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/actionpack-4.0.0.beta1/lib/action_dispatch/routing/route_set.rb:320:in `eval_block' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/actionpack-4.0.0.beta1/lib/action_dispatch/routing/route_set.rb:298:in `draw' 
    from /home/leapfrog/projects/kathloc/config/routes.rb:1:in `<top (required)>' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/dependencies.rb:222:in `load' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/dependencies.rb:222:in `block in load' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/dependencies.rb:213:in `load_dependency' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/dependencies.rb:222:in `load' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/railties-4.0.0.beta1/lib/rails/application/routes_reloader.rb:40:in `block in load_paths' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/railties-4.0.0.beta1/lib/rails/application/routes_reloader.rb:40:in `each' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/railties-4.0.0.beta1/lib/rails/application/routes_reloader.rb:40:in `load_paths' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/railties-4.0.0.beta1/lib/rails/application/routes_reloader.rb:16:in `reload!' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/railties-4.0.0.beta1/lib/rails/application/routes_reloader.rb:26:in `block in updater' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/file_update_checker.rb:75:in `call' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/file_update_checker.rb:75:in `execute' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/railties-4.0.0.beta1/lib/rails/application/routes_reloader.rb:27:in `updater' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/railties-4.0.0.beta1/lib/rails/application/routes_reloader.rb:7:in `execute_if_updated' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/railties-4.0.0.beta1/lib/rails/application/finisher.rb:69:in `block in <module:Finisher>' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/railties-4.0.0.beta1/lib/rails/initializable.rb:30:in `instance_exec' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/railties-4.0.0.beta1/lib/rails/initializable.rb:30:in `run' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/railties-4.0.0.beta1/lib/rails/initializable.rb:55:in `block in run_initializers' 
    from /home/leapfrog/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:150:in `block in tsort_each' 
    from /home/leapfrog/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:183:in `block (2 levels) in each_strongly_connected_component' 
    from /home/leapfrog/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:219:in `each_strongly_connected_component_from' 
    from /home/leapfrog/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:182:in `block in each_strongly_connected_component' 
    from /home/leapfrog/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:180:in `each' 
    from /home/leapfrog/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:180:in `each_strongly_connected_component' 
    from /home/leapfrog/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/tsort.rb:148:in `tsort_each' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/railties-4.0.0.beta1/lib/rails/initializable.rb:54:in `run_initializers' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/railties-4.0.0.beta1/lib/rails/application.rb:213:in `initialize!' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/railties-4.0.0.beta1/lib/rails/railtie/configurable.rb:30:in `method_missing' 
    from /home/leapfrog/projects/kathloc/config/environment.rb:5:in `<top (required)>' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/dependencies.rb:228:in `require' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/dependencies.rb:228:in `block in require' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/dependencies.rb:213:in `load_dependency' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/activesupport-4.0.0.beta1/lib/active_support/dependencies.rb:228:in `require' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/railties-4.0.0.beta1/lib/rails/application.rb:187:in `require_environment!' 
    from /home/leapfrog/.rvm/gems/ruby-2.0.0-p0/gems/railties-4.0.0.beta1/lib/rails/commands.rb:45:in `<top (required)>' 
    from bin/rails:4:in `require' 
    from bin/rails:4:in `<main>' 
+7

Ich bin wirklich genervt. Jede neue Rails-Version hat einige Inkompatibilitäten mit einigen Edelsteinen. Ich gebe mir Zeit, um diese Inkompatibilitäten zu beheben, die sich nicht entwickeln. – Mauro

+3

Erzähl mir davon. Es fiel mir auf, dass Rails wie eine Diktatur ist, mit Leuten, die seit Jahren die einzigen sind, die ein Mitspracherecht haben, wie es vorwärts geht. Was ist mit den neuen Leuten? Rails 2.0 ist viel einfacher zu verstehen als Rails 4.0; es wird wahnsinnig esoterisch. Und wenn ein Open-Source-Projekt wächst, müssen Sie Neulinge gewinnen. Diese Funktion in den Controller zu abstrahieren ist einfach dumm. Es sollte mit dem Modell sein. Aber das kann man nicht in einem IRC sagen. Leute behandeln Schienen wie eine verdammte Religion. Es war eine dumme Idee, dies zu tun und sie sollten es zurück ändern. – Starkers

Antwort

26

Es ist, weil in Schienen-4 hat ActiveModel::MassAssignmentSecurity aus ActiveModel genommen worden. Aber das Gerät verwendet attr_accessible, daher zu verwenden, fügen Sie einfach den folgenden Edelstein in Ihrem Gemfile und versuchen, noch einmal zu laden.

gem 'protected_attributes' 

EDIT:

Jetzt entwickeln für Schienen-4 unterstützt. Füge dies in deine Gemfile ein.

+9

ActiveModel :: MassAssignmentSecurity wurde aus gutem Grund entfernt; Es ist grundlegend fehlerhaft und wurde durch [strong_parameters] (https://github.com/rails/strong_parameters) ersetzt. Daher ist es wahrscheinlich am besten, nicht zu empfehlen, es blind mit dem [protected_attributes] (https://github.com/rails/protected_attributes) -Gemein zurückzubringen. Zweifelsohne wird Devise ohne MassAssignmentSecurity mit Rails 4 kompatibel sein (oder wurde). –

+6

Devise 3.0.0rc unterstützt Rails 4. –

+1

Ja, jetzt unterstützt es für Rails-4, aber als ich die Antwort auf den obigen Beitrag gab, war die Entwicklung für die Erweiterung in Arbeit. –

1

Wenn Sie ein Problem mit Devise haben, dann versuchen Sie "Authlogic" ist auch ein gutes Juwel für die Authentifizierung.

können Sie gem 'authlogic' '~ 3.2.0' verwenden, die die neueste Version Rails 4.0

unterstützt ist

Ruby-Toolbox hat eine Liste der beliebtesten: http://ruby-toolbox.com/categories/rails_authentication.html

4

Anstelle der Verwendung von attr_accessible mit ersinnen in Ihrem Projekt, verwenden Sie bitte in folgenden Weise accesssibles -

wie wir haben attr_accessible: E-Mail: Passwort: password_confirmation,: Remember_Me, dann können wir sie in einem privaten Verfahren aus Sicherheitsgründen konvertieren:

private 

def user_params 
    params.require(:user).permit(:email, :password, :password_confirmation, :remember_me) 

end 
+1

Ruby betrachtet # als Kommentar. Sieht so aus, als würdest du # {file_name} _params auskommentieren. Geht das für dich? – Benjamin

+1

@Vezu verwenden Sie bitte "# {file_params}" anstelle von # {file_params}. –

+0

Ich glaube nicht, weder 'def # {file_name} _params' noch' def "# {file_name} _params" 'ist gültig in ruby ​​ – illusionist

14

bearbeiten: Es gibt jetzt eine Devise Version Rails 4 unterstützt: Devise 3.0.0.rc

Zurück Antwort: Was ich an meinem Ende tat es nur in Ordnung funktioniert ...

  1. In Gemfile: gem 'devise', github: 'plataformatec/devise', branch: 'rails4'

  2. In Gattungen Ted-Modell, entfernen Sie die attr_accessible Zeug.

  3. Aktivieren Sie starke Parameter für Devise statt attr_accessible. Dazu erstellen Sie einen neuen initiliazer mit diesem Inhalt:

    DeviseController.class_eval do 
        def resource_params 
        unless params[resource_name].blank? 
         params.require(resource_name).permit(:email, :password, :password_confirmation, :remember_me) 
        end 
        end 
    end 
    
+0

Sie müssen Ihre vorherige Installation von Gerät vorher reinigen. [deinstallieren] (http://stackoverflow.com/questions/6833161/ruby-how-to-uninstall-devise) – vincentp

1

Es hängt wirklich davon ab, was Sie brauchen, um den Edelstein zu tun. Es gibt viele Möglichkeiten, und Devise ist definitiv oben auf der Spitze. Ich würde Clearance von Thoughtbot empfehlen (https://github.com/thoughtbot/clearance). Es ist sehr gut getestet und häufig aktualisiert.Für mich war es sehr nützlich, wenn ich die Kernauthentifizierungsfunktionalität und nicht alle anderen Sachen benötigte, die mit Edelsteinen wie Devise kommen!

0

Ich habe die Isuue in Gerät für Schienen 4 behoben. Sie können es jetzt ohne Aufwand implementieren.

füge einfach gem 'devise' zu deinem Gemfile hinzu und kombiniere es.

Danke