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]
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サーバーを再起動すると、動作するはずです。
最も簡単な方法は、モデルに定義されているデフォルトリスト(アプリケーションのユーザーに使用されるクラス名、通常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
asはdevise_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
私は同じ問題を抱えていました。私の解決策は、これらの答えの組み合わせです:
最初のコメント/削除: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はビューからすべての登録リンクをスキップし、ルート上の登録パスもなくなります。
以下のコードは私のためのトリックを行うようです:
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
...