отключение регистрации устройства только для рабочей среды
Я запускаю бета-сайт с выбранной группой пользователей. Я хочу отключить регистрацию только в производственной среде, и только на короткий период времени (т. е. я не хочу, чтобы моя регистрация была полностью уничтожена). Я знаю, что могу просто скрыть ссылку "Зарегистрироваться", но я подозреваю, что хакеры умнее, чем я, все еще могут использовать RESTful routes для выполнения регистрации. Каков наилучший способ отключить регистрацию, чтобы мои среды тестирования/разработки все еще работали, но производство пострадало? Спасибо за любые указатели.
Я пробовал указывать именованные области таким образом, что" sign_up "переходит в" sign_in", но это не сработало. Вот что я пробовал:
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
В идеале, мы бы отправили пользователя на страницу" pages#registration_disabled " или что-то в этом роде. Я просто хотел получить что-то работающее, с чем я могу поиграть.
изменить: Я изменил модель в соответствии с запросом, а затем добавил следующее в /spec/user_spec.РБ
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
он проходит как "истинный", а не ложный. Есть ли способ макетировать производственную среду? Я просто размышляю эту.
спасибо!
4 ответа:
поскольку у других есть проблема, которую я испытываю (см. мои комментарии). Вот точно, как я это исправил. Я использовал идею murphyslaw это. Но вы также должны убедиться, что devise использует ваш новый контроллер для маршрутизации регистрации, или он не будет делать много для вас.
вот мой контроллер переопределение:
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
я добавил флэш-сообщения, чтобы сообщить всем, кто каким-то образом натыкается на страницу регистрации, почему она не работает.
вот что в моем
routes.rb
if Rails.env.production? devise_for :users, :controllers => { :registrations => "registrations" } else devise_for :users end
хэш контроллеров указывает, что я хочу, чтобы он использовал мой переопределенный контроллер регистрации.
В любом случае, я надеюсь, что это сэкономит кому-то время.
редактировать
user
модель и удалить:registerable
, Я думаю, это должно дать вам то, что вы хотите.Edit:
Я думаю, что это будет работать:
if Rails.env.production? devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable else devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable, :registerable end
только удалить
:registerable
не решит проблему. Если у вас есть несколько маршрутов в вашем представлении вы получите сообщение об ошибке:
undefined local variable or method 'edit_user_registration_path'
позаботьтесь об этом.
вы могли бы переопределить разработать::RegistrationsController и создать действие, чтобы перенаправить на страницу, которую вы хотите. Контроллер, вероятно, должен выглядеть примерно так:
class User::RegistrationsController < Devise::RegistrationsController def create redirect_to your_page_path if Rails.env.production? end end