update tutorial signup registrationscontroller rails instalar ruby-on-rails ruby-on-rails-3 devise

ruby on rails - tutorial - Devise Helpers(authenticate_user! Current_user, user_signed_in?) No inicializados



rspec rails devise (6)

Agregué esta línea a mi controlador que hizo el truco para mí:

include Devise::Controllers::Helpers

Estoy configurando el dispositivo y necesito poder usar dispositivos de ayuda. Cuando agrego before_filter :authenticate_user! en el controlador de la aplicación obtengo el siguiente undefined method ''authenticate_user!'' for #<HomeController:*> error undefined method ''authenticate_user!'' for #<HomeController:*> undefined method ''authenticate_user!'' for #<HomeController:*>

No está presente en el controlador de mi casa directamente, pero se hereda del controlador de la aplicación, si uso skip_before_filter :authenticate_user! en mi casa (o en cualquier controlador) y al intentar acceder a la página, aparece el siguiente error.

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

Se rompe en la línea que en el archivo layouts / application.html.erb que lo llama. Lo mismo sucede con cualquiera de los ayudantes. Sin embargo, parece que no se cargaron en absoluto, cuando $LOAD_PATH.dup la consola de los rieles e $LOAD_PATH.dup

"/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"

Así que parece que de hecho deberían ser cargados por rieles.

Este es mi controlador de aplicaciones.

clase ApplicationController <ActionController :: Base

ayudante: todos # incluyen todos los ayudantes, todo el tiempo
proteger desde
incluye ActionView :: Helpers :: NumberHelper
antes_filter: authenticate_user!

fin

Reinicié el servidor después de instalar el dispositivo, y varias veces mientras intentaba diferentes intentos para resolver el problema. Si necesita más archivos o información, por favor hágamelo saber. Muchas gracias por adelantado.

Edición: se solicitó a mi archivo user.rb que muestre que efectivamente he instalado el dispositivo

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

Editar: El mensaje de error completo

NoMethodError en HomeController # index

método indefinido `authenticate_user! '' para # <HomeController: 0x000000040c45a0> ''

Aquí está la huella completa

activesupport (3.2.13) lib / active_support / callbacks.rb: 418: en ` ejecute _2094683035699451847__process_action_ 2229546931289158113 _callbacks ''

activesupport (3.2.13) lib / active_support / callbacks.rb: 405: en `__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: en `run_callbacks ''

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

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

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

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

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

activesupport (3.2.13) lib / active_support / notifications.rb: 123: en `instrumento ''

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

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

actionpack (3.2.13) lib / abstract_controller / base.rb: 121: en `proceso ''

actionpack (3.2.13) lib / abstract_controller / rendering.rb: 45: en `proceso ''

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

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

actionpack (3.2.13) lib / action_controller / metal.rb: 246: en `bloque en acción ''

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

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

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

viaje (1.0.4) lib / journey / router.rb: 68: en `bloquear en llamada ''

viaje (1.0.4) lib / journey / router.rb: 56: en ''cada''

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

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

Guardián (1.2.1) lib / warden / manager.rb: 35: en `bloquear en llamada ''

Guardián (1.2.1) lib / warden / manager.rb: 34: en `catch ''

Guardián (1.2.1) lib / warden / manager.rb: 34: en `call ''

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

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

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

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

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

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

rack (1.4.5) lib / rack / session / abstract / id.rb: 210: en `contexto ''

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

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

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

activerecord (3.2.13) lib / active_record / connection_adapters / abstract / connection_pool.rb: 479: en `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: en ` ejecute _177144612565476380_ call _4534346825225857812__callbacks ''

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

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

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

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

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

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

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

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

railties (3.2.13) lib / rails / rack / logger.rb: 32: en `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: en `etiquetado ''

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

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

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

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

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

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

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

railties (3.2.13) lib / rails / engine.rb: 479: en `call ''

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

railties (3.2.13) lib / rails / railtie / configurable.rb: 30: en `method_missing ''

pasajero (4.0.2) lib / phusion_passenger / rack / thread_handler_extension.rb: 77: en `process_request ''

pasajero (4.0.2) lib / phusion_passenger / request_handler / thread_handler.rb: 135: en `accept_and_process_next_request ''

pasajero (4.0.2) lib / phusion_passenger / request_handler / thread_handler.rb: 106: en `main_loop ''

pasajero (4.0.2) lib / phusion_passenger / request_handler.rb: 449: en `bloque (4 niveles) en start_threads ''

pasajero (4.0.2) lib / phusion_passenger / utils / robust_interruption.rb: 108: en `disable_interruptions ''

pasajero (4.0.2) lib / phusion_passenger / request_handler.rb: 444: en `bloque (3 niveles) en start_threads ''

Editar: Este es el texto de ejecutar Devise.helpers en la consola.

$ rieles de consola

Cargando entorno de desarrollo (Rails 3.2.13)

1.9.3-p429: 001> Devise.helpers

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

Edit: Este mi archivo de rutas de rb. : Application.routes.draw do

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


Asegúrese de agregar devise_for :user en sus routes.rb

Ver más aquí: https://.com/a/11180576


Hay muchas cosas que pueden salir mal. Algunas cosas para comprobar en orden:

  • No poder llamar a before_filter :authenticate_user! indica que el dispositivo no está correctamente configurado.
  • Agregue devise_for :users en route.rb (es el usuario, tiene este derecho), a continuación simplifique las reglas de alcance para las pruebas.
  • Necesitas tener el before_filter :authenticate_user! trabajando para obtener los ayudantes en el controlador o incluirlos manualmente
  • Si su controlador base no hereda de ActionController, entonces debe agregar los métodos de ayuda manualmente: Ponga esto en su controlador base helper_method "current_user", "user_signed_in?", "user_session"
  • Una cosa para verificar: ¿ self.controller.current_user funciona en su erb? Esto indicaría que los métodos helper no están incluidos.

Simplemente reinicie su servidor de rieles.

"Tenga en cuenta que debe reiniciar su aplicación aquí si ya la ha iniciado. De lo contrario, se encontrarán con errores extraños, como que los usuarios no puedan iniciar sesión y que los ayudantes de ruta no estén definidos". [Instrucciones de inicio]

[editar] Respuesta más detallada:

Verifique dos cosas adicionales: su HomeController debe heredar de Devise :: Controllers :: Helpers. Y la directiva de dispositivos en route.rb (que genera el método faltante en los Helpers) debe tener una versión de Devise. @@ mappings extendida. El siguiente código puede verificar esto:

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

Para introducir un problema similar en una aplicación de rieles de trabajo, las entradas config / initializers / devise.rb y config / route.rb deben estar deshabilitadas y los rieles deben reiniciarse. Volver a habilitar el código no solucionará el problema a menos que se reinicien los rieles.


Tuve el mismo problema (Rails 5.1.2, Devise 4.3.0) y resultó que estaba usando:

devise_for :user do ... end

en lugar de

devise_for :users do ... end

Lo arreglé cambiando el espacio de nombres.

usuario => usuarios


Tuve el mismo problema siguiendo la guía de inicio de Devise.

Resulta que, erróneamente, había ejecutado rails generate model User lugar de rails generate devise User , que acaba de crear un modelo de ActiveRecord simple que tenía el nombre de "usuario".