特定のユーザーグループでベータ版サイトを立ち上げています。本番環境でのみ登録を無効にし、短期間のみ無効にします(つまり、登録をすべて無効にしません)。 「サインアップ」リンクを単純に隠すことができることは知っていますが、ハッカーはまだRESTfulルートを使用して登録を行うことができるよりも賢明だと思います。登録を無効にしてテスト/開発環境は引き続き機能するが、本番環境は影響を受けるための最良の方法は何ですかポインタをありがとう。
「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.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
falseではなく「true」として渡されます。実稼働環境をモックアップする方法はありますか?私はこれを吐き出しているだけです。
ありがとう!
他の人が私が抱えている問題を抱えているので(コメントを参照)。修正方法は次のとおりです。私はマーフィースローのアイデアを使用しました。ただし、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
を削除すると、あなたが望むものが得られると思います。
編集:
私はこれがうまくいくと思う:
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'
これに注意してください。
devise :: RegistrationsControllerとcreateアクションをオーバーライドして、目的のページにリダイレクトできます。コントローラーはおそらく次のようになります。
class User::RegistrationsController < Devise::RegistrationsController
def create
redirect_to your_page_path if Rails.env.production?
end
end