it-swarm.com.de

Entwicklungshelfer (authenticate_user !, current_user, user_signed_in?) Nicht initialisiert

Ich baue ein Design auf und muss in der Lage sein, Design-Helfer einzusetzen. Wenn ich before_filter :authenticate_user! zum Anwendungscontroller hinzufüge, wird die folgende Fehlermeldung angezeigt: undefined method 'authenticate_user!' for #<HomeController:*>

Es ist nicht direkt in meinem Heim-Controller vorhanden, sondern wird vom Anwendungs-Controller geerbt, wenn ich skip_before_filter :authenticate_user! in meinem Heim (oder einem anderen Controller) verwende und versuche, auf die Seite zuzugreifen.

undefined method `user_signed_in?' for #<#<Class *>

Es bricht in der Zeile ab, die in der Datei layouts/application.html.erb enthalten ist, die es aufruft. Das Gleiche passiert für jeden der Helfer. Es sieht jedoch so aus, als würden sie überhaupt nicht geladen, als ich die Rails -Konsole hochlud und $LOAD_PATH.dup die enthaltene Ausgabe eingab

 "/usr/local/rvm/gems/Ruby-1.9.3-p429/gems/devise-2.2.4/lib", "/usr/local/rvm/gems/Ruby-1.9.3-p429/gems/devise-2.2.4/app/controllers", "/usr/local/rvm/gems/Ruby-1.9.3-p429/gems/devise-2.2.4/app/helpers", "/usr/local/rvm/gems/Ruby-1.9.3-p429/gems/devise-2.2.4/app/mailers" 

Es scheint also, dass sie tatsächlich mit Rails beladen werden sollten.

Dies ist mein Anwendungscontroller

klasse ApplicationController <ActionController :: Base

helfer: alle # enthalten immer alle helfer
vor Fälschung schützen
ActionView :: Helpers :: NumberHelper einschließen
before_filter: authenticate_user!

ende

Ich habe den Server nach der Installation von devise neu gestartet und mehrere Male versucht, das Problem zu lösen. Wenn weitere Dateien oder Informationen benötigt werden, lassen Sie es mich bitte wissen. Vielen Dank im Voraus.

Bearbeiten: Meine user.rb-Datei wurde angefordert, um zu zeigen, dass ich das Gerät tatsächlich installiert habe

class User < ActiveRecord::Base

  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :encryptable, :encryptor => :restful_authentication_sha1  

  # Setup accessible (or protected) attributes for your model  
  attr_accessible :email, :password, :password_confirmation, :remember_me  

end

Bearbeiten: Die gesamte Fehlermeldung

NoMethodError im HomeController # -Index

undefinierte Methode `authenticate_user! ' für # <HomeController: 0x000000040c45a0> '

Hier ist die vollständige Spur

activesupport (3.2.13) lib/active_support/callbacks.rb: 418: in `run _ 2094683035699451847__process_action _222954693128915811 _ callbacks '

activesupport (3.2.13) lib/active_support/callbacks.rb: 405: in `__run_callback '

activesupport (3.2.13) lib/active_support/callbacks.rb: 385: in> `_run_process_action_callbacks '

activesupport (3.2.13) lib/active_support/callbacks.rb: 81: in `run_callbacks '

actionpack (3.2.13) lib/abstract_controller/callbacks.rb: 17: in `process_action '

actionpack (3.2.13) lib/action_controller/metal/rescue.rb: 29: in `process_action '

actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb: 30: in `block in process_action '

activesupport (3.2.13) lib/active_support/notifications.rb: 123: in `block in instrument '

activesupport (3.2.13) lib/active_support/notifications/instrumenter.rb: 20: in `instrument '

activesupport (3.2.13) lib/active_support/notifications.rb: 123: in `instrument '

actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb: 29: in `process_action '

actionpack (3.2.13) lib/action_controller/metal/params_wrapper.rb: 207: in `process_action '

actionpack (3.2.13) lib/abstract_controller/base.rb: 121: in `process '

actionpack (3.2.13) lib/abstract_controller/rendering.rb: 45: in `process '

actionpack (3.2.13) lib/action_controller/metal.rb: 203: in `dispatch '

actionpack (3.2.13) lib/action_controller/metal/rack_delegation.rb: 14: in `dispatch '

actionpack (3.2.13) lib/action_controller/metal.rb: 246: in `block in action '

actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb: 73: in `call '

actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb: 73: in `dispatch '

actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb: 36: in `call '

journey (1.0.4) lib/journey/router.rb: 68: in `Block in call '

journey (1.0.4) lib/journey/router.rb: 56: in `each '

journey (1.0.4) lib/journey/router.rb: 56: in `call '

actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb: 612: in `call '

warden (1.2.1) lib/warden/manager.rb: 35: in `Block in call '

warden (1.2.1) lib/warden/manager.rb: 34: in `catch '

warden (1.2.1) lib/warden/manager.rb: 34: in `call '

actionpack (3.2.13) lib/action_dispatch/middleware/best_standards_support.rb: 17: in `call '

rack (1.4.5) lib/rack/etag.rb: 23: in `call '

rack (1.4.5) lib/rack/conditionalget.rb: 25: in `call '

actionpack (3.2.13) lib/action_dispatch/middleware/head.rb: 14: in `call '

actionpack (3.2.13) lib/action_dispatch/middleware/params_parser.rb: 21: in `call '

actionpack (3.2.13) lib/action_dispatch/middleware/flash.rb: 242: in `call '

rack (1.4.5) lib/rack/session/abstract/id.rb: 210: in `context '

rack (1.4.5) lib/rack/session/abstract/id.rb: 205: in `call '

actionpack (3.2.13) lib/action_dispatch/middleware/cookies.rb: 341: in `call '

activerecord (3.2.13) lib/active_record/query_cache.rb: 64: in `call '

activerecord (3.2.13) lib/active_record/connection_adapters/abstract/connection_pool.rb: 479: in `call '

actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb: 28: in `block in call '

activesupport (3.2.13) lib/active_support/callbacks.rb: 405: in `run _ 177144612565476380 _call _ 4534346825225857812__callbacks '

activesupport (3.2.13) lib/active_support/callbacks.rb: 405: in `__run_callback '

activesupport (3.2.13) lib/active_support/callbacks.rb: 385: in `_run_call_callbacks '

activesupport (3.2.13) lib/active_support/callbacks.rb: 81: in `run_callbacks '

actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb: 27: in `call '

actionpack (3.2.13) lib/action_dispatch/middleware/reloader.rb: 65: in `call '

actionpack (3.2.13) lib/action_dispatch/middleware/remote_ip.rb: 31: in `call '

actionpack (3.2.13) lib/action_dispatch/middleware/debug_exceptions.rb: 16: in `call '

actionpack (3.2.13) lib/action_dispatch/middleware/show_exceptions.rb: 56: in `call '

railties (3.2.13) lib/Rails/rack/logger.rb: 32: in `call_app '

railties (3.2.13) lib/Rails/rack/logger.rb: 16: in `Block in call '

activesupport (3.2.13) lib/active_support/tagged_logging.rb: 22: in `tagged '

railties (3.2.13) lib/Rails/rack/logger.rb: 16: in `call '

actionpack (3.2.13) lib/action_dispatch/middleware/request_id.rb: 22: in `call '

rack (1.4.5) lib/rack/methodoverride.rb: 21: in `call '

rack (1.4.5) lib/rack/runtime.rb: 17: in `call '

activesupport (3.2.13) lib/active_support/cache/strategy/local_cache.rb: 72: in `call '

rack (1.4.5) lib/rack/lock.rb: 15: in `call '

actionpack (3.2.13) lib/action_dispatch/middleware/static.rb: 63: in `call '

railties (3.2.13) lib/Rails/engine.rb: 479: in `call '

railties (3.2.13) lib/Rails/application.rb: 223: in `call '

railties (3.2.13) lib/Rails/railtie/configure.rb: 30: in `method_missing '

passenger (4.0.2) lib/phusion_passenger/rack/thread_handler_extension.rb: 77: in `process_request '

passenger (4.0.2) lib/phusion_passenger/request_handler/thread_handler.rb: 135: in `accept_and_process_next_request '

passenger (4.0.2) lib/phusion_passenger/request_handler/thread_handler.rb: 106: in `main_loop '

passenger (4.0.2) lib/phusion_passenger/request_handler.rb: 449: in `block (4 Ebenen) in start_threads '

passenger (4.0.2) lib/phusion_passenger/utils/robust_interruption.rb: 108: in "disable_interruptions"

passenger (4.0.2) lib/phusion_passenger/request_handler.rb: 444: in `block (3 Ebenen) in start_threads '

Bearbeiten: Dies ist der Text vom Ausführen von Devise.helpers in der Konsole.

$ Rails Konsole

Entwicklungsumgebung laden (Rails 3.2.13)

1.9.3-p429: 001> Entwicklungshelfer

=> # <Set: {Devise :: Controllers :: Helpers}>

Bearbeiten: Diese meine Routen rb-Datei. : Application.routes.draw tun

devise_for :users  

resource :sessions, :only => [:new, :create, :destroy]

devise_scope :user do
    match 'signup' => 'users#new', :as => :signup
    match 'register' => 'users#create', :as => :register
    match '/login' => 'sessions#new', :as => :login 
     match 'logout' => 'sessions#destroy', :as => :logout
end
match '/activate/:activation_code' => 'users#activate', :as => :activate, :activation_code => nil

match '/users/:id', :to => 'users#show', :as => :user

resources :users do

member do
     put :suspend
     put :unsuspend
     delete :purge
end

end

resource :sessions

   other resources

match '' => 'home#index', :as => :home
match ':controller(/:action(/:id))'
root to: 'home#index'
end 
19
Btuman

Stellen Sie sicher, dass Sie devise_for :user in Ihren routes.rb einfügen. 

Weitere Informationen finden Sie hier: https://stackoverflow.com/a/11180576

32
paulguy

Starten Sie einfach Ihren Rails-Server neu.

"Beachten Sie, dass Sie Ihre App hier neu starten sollten, wenn Sie sie bereits gestartet haben. Andernfalls treten seltsame Fehler auf, z. B. dass Benutzer sich nicht anmelden können und die Routen-Helfer undefiniert sind." [Erste Schritte Anweisungen]

[edit] Ausführlichere Antwort:

Bitte überprüfen Sie zwei weitere Dinge: Ihr HomeController sollte von Devise :: Controllers :: Helpers erben. Und die Devise-Direktive in route.rb (die die fehlende Methode in Helpers generiert) sollte die Devise-Zuordnungen erweitert haben. Der folgende Code kann dies überprüfen:

class ApplicationController ...
  ...
  before_filter do
    fail "bad ancestor" unless self.kind_of?(Devise::Controllers::Helpers)
    fail "no mapping" unless Devise.class_variable_get(:@@mappings).[:user]
    authenticate_user!
  end
end

Um ein ähnliches Problem in einer arbeitenden Rails-Anwendung einzuführen, müssen die Einträge config/initializers/devise.rb und config/routes.rb deaktiviert und Rails neu gestartet werden. Durch die erneute Aktivierung des Codes wird das Problem nicht behoben, wenn Rails nicht neu gestartet wird.

6
kunysch

Es gibt viele Dinge, die schief gehen können. Einige Dinge, die in dieser Reihenfolge überprüft werden müssen:

  • Wenn Sie before_filter :authenticate_user! nicht aufrufen können, bedeutet dies, dass Gerät nicht richtig eingerichtet ist. 
  • Fügen Sie devise_for :users in routen.rb hinzu (es ist user s , Sie haben dieses Recht), und vereinfachen Sie als Nächstes diese Bereichsregeln für das Testen.
  • Der before_filter :authenticate_user! muss funktionieren, damit die Helfer in die Steuerung gelangen oder die Helfer manuell eingebunden werden
  • Wenn Ihr Basiscontroller nicht von ActionController erbt, müssen Sie die Hilfsmethoden manuell hinzufügen: Legen Sie dies in Ihren Basiscontroller helper_method "current_user", "user_signed_in?", "user_session"
  • Eine Sache, die Sie überprüfen sollten: Funktioniert self.controller.current_user in Ihrem Computer? Dies würde bedeuten, dass die helper_methods nicht enthalten sind.
2

Ich habe diese Zeile zu meinem Controller hinzugefügt, der den Trick für mich gemacht hat:

include Devise::Controllers::Helpers
1
AmitF

Ich hatte das gleiche Problem, wenn ich die Anleitung für den ersten Start von Devise befolgte.

Es stellte sich heraus, dass ich Rails generate model User statt Rails generate devise User fälschlicherweise ausgeführt hatte, wodurch ein reines ActiveRecord-Modell erstellt wurde, das zufällig den Namen 'User' hatte.

0
Niek

Ich hatte das gleiche Problem (Rails 5.1.2, Devise 4.3.0) und zufällig benutzte ich: -

devise_for :user do
  ...
end

anstatt

devise_for :users do
  ...
end

Ich habe es durch Ändern des Namensraums behoben.

benutzer => Benutzer

0
Roshan