tutorial rails español ejemplos ruby-on-rails ruby-on-rails-4 devise warden

ruby-on-rails - español - rails devise registration controller



Redirigir para iniciar sesión en la página si el usuario no está autenticado con Devise (5)

Agregue este código en config / routes.rb devise_for :users y resources :users y puede generar ideas en vistas.

Estoy usando Devise con Ruby on Rails.

¿Cuál es la forma recomendada de redirigir a los usuarios no autenticados a la nueva página de sesiones si intentan acceder a una página que requiere autenticación?

En este momento me sale un error que dice que ninguna ruta coincide con la que intentan acceder (lo que lleva a un error 404 en la producción).


Debe consultar el Cómo hacer: Cómo redirigir a una página específica de Devise cuando el usuario no puede ser autenticado .

Otra alternativa en la que puedo pensar es crear una Restricción de enrutamiento que envuelva sus rutas protegidas. Es mejor que te apegues a la manera de Devise, pero aquí hay un ejemplo:

#On your routes.rb constraints(Constraints::LoginRequired) do get ''/example'' end #Somewhere like lib/constraints/login_required.rb module Constraints class LoginRequired def self.matches?(request) #some devise code that checks if the user is logged in end end end


Pensé que solo podrías agregar: before_action: authenticate_user! a cada controlador que requirió que el usuario iniciara sesión

Soy un principiante de Rails, pero encontré esto en mis propias búsquedas y funciona bien en mi aplicación.


Puedes hacer lo que GeekTol escribió, o simplemente poner

before_action :authenticate_user!

en tu controlador.

En este caso, idear utiliza el usuario autenticado predeterminado. método, que redireccionará a "user_session_path" y usará el mensaje flash predeterminado.

¡No es necesario reescribir authenticate_user! método, a menos que desee personalizarlo.


Simplemente agregue este método a application_controller.rb

protected def authenticate_user! if user_signed_in? super else redirect_to login_path, :notice => ''if you want to add a notice'' ## if you want render 404 page ## render :file => File.join(Rails.root, ''public/404''), :formats => [:html], :status => 404, :layout => false end end

Y puede llamar a este método en before_filter otros controladores que desee.

p.ej :

class HomesController < ApplicationController before_filter :authenticate_user! ## if you want spesific action for require authentication ## before_filter :authenticate_user!, :only => [:action1, :action2] end

No te olvides de agregar login_path en routes.rb

devise_scope :user do match ''/sign-in'' => "devise/sessions#new", :as => :login end

nota: siempre uso de esta manera cuando juego con el dispositivo para la autenticación de mi aplicación ... (carriles 3.2 y rieles 4.0.1)