tutorial rails gema ruby-on-rails devise registration production-environment

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