Devise Invitable — ограничение доступа только для приглашенных пользователей

Возможно, я ищу неправильные ключевые слова, но я не могу найти способ ограничить только пользователей, которым разрешено создавать учетную запись на моем сайте rails (или, может быть, я неправильно использую devise-invitable). Я предполагаю, что должен быть метод, который я вызываю в фильтре перед или переключаю переключатель в файле initializer/devise.rb.

Я попытался в своем users_controller.rb, и мне не удалось использовать Ruby Doc как ссылка

before_filter: invited?

Я прочитал initializers/devise.rb и файл readme, и мне не повезло.


person AGirlThatCodes    schedule 05.12.2014    source источник


Ответы (2)


Я думаю, что вы должны сделать собственный фильтр для этой цели.

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
person xyingsoft    schedule 05.12.2014
comment
Благодарю вас! Я мог бы подумать на месте или с исправлением моих маршрутов. - person AGirlThatCodes; 05.12.2014
comment
Еще раз спасибо, в итоге я выбрал предложенный вариант, который был у этого устройства. - person AGirlThatCodes; 08.12.2014

Я понял, что не подумал об очевидном. Ограничить пользователей через devise с маршрутами, а не devise-invitable.

Использовано Решение №2 в качестве ссылки (см. ниже)

Предположим, вы не хотите разрешать регистрацию, но хотите разрешить смену пароля для зарегистрированных пользователей. Просто вставьте этот код в route.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) (если вы используете общие представления для нескольких моделей, вы можете использовать send("#{resource_name}_registration_path", resource))

Примечание. Если вы используете rails 4.0+, вам следует использовать patch вместо put для обновлений. Вы должны изменить метод в form_tag, находящемся в app/views/devise/registrations/edit.html.erb и файле routes.rb.

person AGirlThatCodes    schedule 05.12.2014