我可能正在搜索错误的关键词,但我找不到一种方法来限制被邀请被允许在我的rails网站上创建帐户的用户(或者我可能正在使用设计错误的设计) 。我假设,我应该在before filter中调用一个方法,或者在initializer / devise.rb上翻转开关
我尝试使用 users_controller.rb ,并且没有使用Ruby Doc作为reference
的运气before_filter: invited?
我已经阅读了初始化器/ devise.rb和自述文件,但没有任何运气。
答案 0 :(得分:1)
我认为您应该为此目的制作自定义过滤器。
before_action :authenticate_user!
before_filter :restrict_only_invited_users
def restrict_only_invited_users
redirect_to :root if current_user.invitation_accepted_at.blank?
end
答案 1 :(得分:1)
我发现我并没有想到这一点。通过设计限制用户使用路线,而不是设计 - 邀请。
使用Solution #2作为参考(见下文)
让我们假设您不想允许注册,但您希望允许更改注册用户的密码。只需将此代码粘贴到routes.rb:
即可devise_for :users, :skip => [:registrations]
as :user do
get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
put 'users/:id' => 'devise/registrations#update', :as => 'user_registration'
end
然后你可以在你的视图中建立这样的链接:
= link_to "Change your password", edit_user_registration_path
注意:您需要相应地更新默认设计视图,即在app/views/devise/registrations/edit.html.erb
将registration_path(resource_name)
更改为user_registration_path(resource)
(如果对多个模型使用共享视图,则可以使用{{1} }
注意:如果您使用的是rails 4.0+,则应该使用patch而不是put进行更新。您应该更改驻留在send("#{resource_name}_registration_path", resource))
和app/views/devise/registrations/edit.html.erb
文件中的form_tag中的方法。