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