web-dev-qa-db-ja.com

Deviseからサインアップを削除/無効にする方法

Deviseから「user/sign_up」パスを削除または無効にしようとしています。ランダムな人がアプリケーションにアクセスしたくないため、これを行っています。routes.rbに次のコードを追加することで、部分的に機能しています。

Rails.application.routes.draw do
  devise_scope :user do
    get "/sign_in" => "devise/sessions#new" # custom path to login/sign_in
    get "/sign_up" => "devise/registrations#new", as: "new_user_registration" # custom path to sign_up/registration
  end

...

devise_for :users, :skip => :registration

end

ただし、これにより<%= link_to "Profile", edit_user_registration_path, class: "btn btn-info btn-flat" %>

ユーザーが自分のプロファイルを更新できるように、これを保持します。私はそれがdevise_for :users, :skip => :registration

この問題の解決策はありますか?

ランニング

工夫(4.2.0、4.1.1、4.1.0)

Rails 4.2.5

Ruby 2.3.0p0(2015-12-25リビジョン53290)[x86_64-linux]

23
M.T Davis

Deviseからsign_upパスを削除する解決策

routes.rbの先頭に次を入力します

Rails.application.routes.draw do
  devise_scope :user do
    get "/sign_in" => "devise/sessions#new" # custom path to login/sign_in
    get "/sign_up" => "devise/registrations#new", as: "new_user_registration" # custom path to sign_up/registration
  end

...上記の文の後に、routes.rbに以下を追加します

devise_for :users, :skip => [:registrations] 
  as :user do
  get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
  put 'users' => 'devise/registrations#update', :as => 'user_registration'
  end

これにより、user/sign_upを壊すことなく、Deviseのedit_user_registration_pathパスが削除/無効になります

Railsサーバーを再起動すると、動作するはずです。

13
M.T Davis

最も簡単な方法は、モデルに定義されているデフォルトリスト(アプリケーションのユーザーに使用されるクラス名、通常ser)から「:registerable」deviseモジュールを削除することです。

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  ...
end

したがって、次のようになります。

class User < ActiveRecord::Base
  devise :database_authenticatable,
         :recoverable, :rememberable, :trackable, :validatable

  ...
end
43
jcgil

asdevise_scopeの単なるエイリアスであるため、すべてを1つのブロックに入れることができます。

devise_for :users, skip: [:registrations]
as :user do
  get "/sign_in" => "devise/sessions#new" # custom path to login/sign_in
  get "/sign_up" => "devise/registrations#new", as: "new_user_registration" # custom path to sign_up/registration
  get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
  put 'users' => 'devise/registrations#update', :as => 'user_registration'
end
4

私は同じ問題を抱えていました。私の解決策は、これらの答えの組み合わせです:

最初のコメント/削除:registerable on user.rb

class User < ActiveRecord::Base devise :database_authenticatable, #:registerable, :recoverable, :rememberable, :trackable, :validatable end次に、routes.rbのデバイスから登録パスを削除します

devise_for :users, :skip => [:registrations] , controllers: { sessions: 'users/sessions' }

これで、deviseはビューからすべての登録リンクをスキップし、ルート上の登録パスもなくなります。

2
David Roth

以下のコードは私のためのトリックを行うようです:

Rails.application.routes.draw do

  devise_scope :users do #notice "users" here, not "user"
    get "/sign_in" => "devise/sessions#new" # custom path to login/sign_in
    get "/sign_up" => "devise/registrations#new", as: "new_user_registration" # custom path to sign_up/registration
  end

  devise_for :users, :skip => [:registrations]
  as :user do
    get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
    put 'users' => 'devise/registrations#update', :as => 'user_registration'
  end
...
0
Amir Rajak