ruby-on-rails - gema - pundit rails
Inhabilitando el registro de ideas para el entorno de producción solamente (4)
Como otros están teniendo el problema que estoy teniendo (ver mis comentarios). Aquí es exactamente cómo lo arreglé. Usé la idea de Murphyslaw. Pero también debe asegurarse de que el dispositivo utilice su nuevo controlador para el enrutamiento de registro, o no le servirá de mucho.
Aquí está mi anulación de controlador:
class RegistrationsController < Devise::RegistrationsController
def new
flash[:info] = ''Registrations are not open yet, but please check back soon''
redirect_to root_path
end
def create
flash[:info] = ''Registrations are not open yet, but please check back soon''
redirect_to root_path
end
end
He agregado mensajes flash para informar a cualquiera que de algún modo se tropiece con la página de registro por qué no está funcionando.
Aquí está lo que está en mis routes.rb
if Rails.env.production?
devise_for :users, :controllers => { :registrations => "registrations" }
else
devise_for :users
end
El hash de los controladores especifica que quiero que use mi controlador de registros anulado.
De todos modos, espero que eso le ahorre a alguien algo de tiempo.
Estoy lanzando un sitio beta con un selecto grupo de usuarios. Deseo inhabilitar el registro solo en el entorno de producción, y solo por un corto período de tiempo (es decir, no deseo desarticular mi registro por completo). Sé que puedo simplemente ocultar el enlace de "registro", pero sospecho que los hackers son más inteligentes de lo que puedo usar las rutas RESTful para lograr registros. ¿Cuál es la mejor manera de desactivar el registro para que mis entornos de prueba / desarrollo sigan funcionando, pero la producción se ve afectada? Gracias por cualquier puntero.
He intentado señalar los ámbitos nombrados de tal manera que "sign_up" va a "sign_in", pero no funcionó. Esto es lo que he intentado:
devise_scope :user do
get "users/sign_in", :to => "devise/sessions#new", :as => :sign_in
get "users/sign_up", :to => "devise/sessions#new", :as => :sign_up
end
Idealmente, enviaríamos al usuario a la página "pages # registration_disabled" o algo así. Solo quería que funcionara algo con lo que pudiera jugar.
EDITAR: He cambiado el modelo según lo solicitado, luego he añadido lo siguiente a /spec/user_spec.rb
describe "validations" do
it "should fail registration if in production mode" do
ENV[''RAILS_ENV''] = "production"
@user = Factory(:user).should_not be_valid
end
end
está pasando como "verdadero" en lugar de falso. ¿Hay alguna manera de burlarse del entorno de producción? Solo estoy escupiendo este.
¡Gracias!
Edite el modelo de user
y elimine :registerable
, creo que debería darle lo que desea.
Editar:
Creo que esto funcionaría:
if Rails.env.production?
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable
else
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable, :registerable
end
Solo eliminar :registerable
no resolverá el problema. Si tiene algunas rutas en su vista, obtendrá un error:
undefined local variable or method ''edit_user_registration_path''
Cuida de esto.
podría anular el controlador Devise :: RegistrationsController y la acción de crear para redirigir a la página que desea. El controlador probablemente debería verse más o menos así:
class User::RegistrationsController < Devise::RegistrationsController
def create
redirect_to your_page_path if Rails.env.production?
end
end