tutorial sign_in rails method generate español ruby-on-rails ruby-on-rails-3 devise

ruby-on-rails - sign_in - rspec rails devise



Rails+Devise-¿Hay alguna forma de BANAR a un usuario para que no puedan iniciar sesión o restablecer su contraseña? (3)

Acabo de implementar esto en mi proyecto yo mismo. Lo que hice fue similar a Kleber, lo definí en mi aplicación / controladores / sessions_controller.rb (reemplazando a Devise) ...

class SessionsController < Devise::SessionsController protected def after_sign_in_path_for(resource) if resource.is_a?(User) && resource.banned? sign_out resource flash[:error] = "This account has been suspended for violation of...." root_path else super end end end

Y luego agregué una columna booleana a los Usuarios llamada ''prohibido'', por lo que los moderadores marcan la casilla de verificación al editar el usuario en el backend, y el booleano devolverá verdadero.

Pero hubo un error ... si un usuario ya había iniciado sesión y luego se le había prohibido, todavía tenía acceso a hacer cosas en el sitio (comentarios, etc.) al menos hasta que su sesión expirara o se desconectara. Así que hice esto en la aplicación / controllers / application_controller.rb ...

class ApplicationController < ActionController::Base before_filter :banned? def banned? if current_user.present? && current_user.banned? sign_out current_user flash[:error] = "This account has been suspended...." root_path end end end

Eso los desconectará automáticamente si se detecta una prohibición. De todos modos, no estoy seguro de que todo esto sea la "mejor" forma de tenerlo en cuenta ya que soy más nuevo en Rails, pero todo funciona para mí y espero que al menos te dé un buen comienzo.

Tengo muchos usuarios gracias al dispositivo y quiero prohibir algunos creadores de problemas. ¿Devise tiene este soporte incorporado?

Gracias


Desde el dispositivo doku para authenticatable.rb :

Antes de autenticar a un usuario y en cada solicitud, ¿Desea verificar si su modelo está activo llamando a model.active_for_authentication? Este método es sobrescrito por otros módulos de diseño. Por ejemplo,: confirmable sobrescribe .active_for_authentication? Solo devuelve verdadero si su modelo fue confirmado.

Usted sobrescribe este método usted mismo, pero si lo hace, no olvide llamar super:

def active_for_authentication? super && special_condition_is_valid? end

Por lo tanto, cuando tiene un indicador blocked en la base de datos de usuarios, el método en el modelo de usuario se parece a esto:

def active_for_authentication? super && !self.blocked end


Podría agregar un campo llamado "prohibido" a su tabla de Usuarios.

y luego, en tu controlador, puedes tener algo como esto:

class UsersController < ApplicationController before_filter :deny_banned protected def deny_banned if current_user.banned? redirect_to root_path, :notice => "You are banned from this site." end end end

Esto no está completo, pero espero que te ayude de alguna manera.