在rails项目中,我使用devise
来管理我的用户。现在我希望从sign up
删除login-page
,只有已经存在的用户才能注册新用户。
最好的方法是什么?
答案 0 :(得分:0)
要从登录页面删除注册链接,请安装设计视图并从" shared / links"中删除该链接。部分。
在您的终端中,生成设计视图:
$ cd path/to/app
$ rails generate devise:views users
在创建的文件夹views / devise中,编辑文档shared / _links.html.erb以仅包含您要显示的链接。
要仅允许现有用户创建新用户,您至少需要对Devise :: RegistrationsController控制器操作new和create进行限制。这有点复杂,需要创建自定义Devise注册控制器。
为此,在控制器文件夹中创建一个名为registrations_controller.rb的文件,并更新routes.rb文件以将devise_for:user指向该新控制器。要将操作限制为已登录的用户,请仅考虑使用Devise帮助程序" authenticate_user!"。所有这些建议可能如下所示:
#controllers/registration_controllers.rb
class RegistrationsController < Devise::RegistrationsController
before_action :authenticate_user!, only: [:new, :create]
def new
super
end
def new
super
end
end
你的路线
#config/routes.rb
devise_for :users, :controllers => { :registrations => "registrations" }
理想情况下,在视图中,未登录的用户甚至不应该选择尝试创建新用户,因此应该有一些额外的视图逻辑,例如:
<% if user_signed_in? %>
<%= link_to "New user", new_user_registration_path %>
<% end %>
要清理视图,您可以考虑将这样的条件视图逻辑提取到帮助程序中。
通过此设置,现有用户将能够通过new_user_registration_path创建新用户。
有关更多信息,Devise文档非常有用(https://github.com/plataformatec/devise)以及仔细阅读其他StackOverflow答案。