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.