require_no_authentication requested rendered redirected rails page halted example custom after_sign_in_path_for after ruby-on-rails-3 redirect devise render

ruby-on-rails-3 - requested - rails devise custom session controller



rails: 3 Devise signup La cadena de filtros se detuvo como: require_no_authentication rendered or reenviado (4)

Al igual que usted, quería que un usuario administrador pudiera agregar nuevos usuarios. Pero no quería meterme con el Devise Registerable, ya que en realidad quería que los usuarios aún pudieran registrarse ellos mismos. Tengo algunos usuarios administradores con permiso para agregar un nuevo usuario, así que creé métodos adicionales en mi controlador de usuario y vistas adicionales para manejar ese caso.

Mis métodos adicionales no son referenciados por el prepend_forector_filter de Devise: require_no_authentication, por lo que no reciben el error.

Mi receta:

En app / controllers / users_controller.rb (o cualquier objeto para el que esté utilizando el diseño): copie los métodos nuevos, cree y actualice y cambie el nombre de las copias a admin_new, admin_create y admin_update.

En app / views / users, copie new.html.erb a admin_new.html.erb Cambie el parcial para referirse a admin_form en lugar de a la forma:

<%= render ''admin_form'' %>

Luego copie el _form.html.erb parcial a _admin_form.html.erb. En _admin_form.html.erb, cambie form_for para usar una URL diferente:

form_for(@user, :url => ''/users/admin_create'')

Agregue rutas en config / routes.rb para apuntar a los métodos alternativos en el controlador de usuario:

devise_scope :user do ... get ''users/admin_new'' => ''users#admin_new'' post ''users/admin_create'' => ''users#admin_create'' end

Ahora puede agregar usuarios mientras está conectado yendo a / users / admin_new, y los usuarios aún pueden crear su propio usuario (registro) utilizando el mecanismo de diseño que no haya alterado.

Estoy usando Devise en mi sitio. Creo el espacio de nombres de administrador y le doy la funcionalidad de crear usuario por administrador.
mis rutas son como bajo

devise_for :users,:has_many => :comments, :controllers => {:sessions =>''devise/sessions'',:registrations => ''devise/registrations''} do get "/login", :to => "devise/sessions#new", :as => :login get "/signup", :to => "devise/registrations#new", :as => :signup get "/logout", :to => "devise/sessions#destroy", :as => :logout end

cuando hago clic en el enlace add_user que tiene signup_path causa el siguiente error:

Mi error

Started GET "/signup" for 127.0.0.1 at Fri Mar 09 12:49:11 +0530 2012 Processing by Devise::RegistrationsController#new as HTML User Load (0.1ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 35 LIMIT 1 Redirected to http://localhost:3000/admin Filter chain halted as :require_no_authentication rendered or redirected Completed 302 Found in 3ms (ActiveRecord: 0.1ms)

Creo que va al controlador de registro ideado, pero debido a la siguiente línea causa un error al diseñar el controlador de registro

prepend_before_filter :require_no_authentication, :only => [ :new, :create, :cancel ]


Hola chicos, tengo una solución aún más simple:

prepend_before_filter :require_no_authentication, only: [:cancel ]

Al eliminar :new, :create prepend_before_filter :new, :create from the prepend_before_filter reemplaza el código fuente y resuelve el problema. Tuve el mismo problema y resolvió mi problema.


La línea mencionada en el Controlador de Devise tiene sentido en casos generales: un usuario conectado no puede registrarse. Como estás en un caso donde solo un administrador puede crear un usuario, sugiero que no uses el controlador de Devise en el módulo Registerable y que escribas tu propio controlador con tus propias reglas. Puedes escribirlo basándose en el controlador de Devise cambiando solo la línea mencionada.

Si desea usarlo, intente omitir el before_filter con skip_before_filter . No creo que sea la mejor solución. y yo escribiría mi propio controlador.


Recibí el siguiente error en mi registro de desarrollo.

Filter chain halted as :require_no_authentication

Se creó un bucle infinito porque la herramienta after_sign_in_path_for en application_controller.rb estaba redireccionando a la página anterior con

stored_location_for(resource)

La gema de Devise apunta al usuario cuando se edita la contraseña.