如何从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 

但是,这会打破

我想保留,以便用户可以更新他们的个人资料。 我知道这是因为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]

最简单的方法是从模型中定义的默认列表中删除“:registerable”设计模块(用于应用程序用户的类名,通常是User )。

 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 

从Devise中删除sign_up路径的解决方案

routes.rb的开头输入以下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添加以下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 

这将删除/禁用Devise的user/sign_up路径,而不会破坏edit_user_registration_path

重新启动rails服务器,它应该工作。

因为它只是devise_scope的别名, 所以您可以将所有内容放在一个块中。

 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 user.rb :registerable

class User < ActiveRecord::Base devise :database_authenticatable, #:registerable, :recoverable, :rememberable, :trackable, :validatable end第二步从routes.rb中的routes.rb删除注册路径

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

现在,设计将从他们的视图中跳过所有注册链接,并且您的路线上也不再有注册路径。

下面的代码似乎对我有用:

 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 ... 
Interesting Posts