公式の指示に従って、Devise のコントローラーの一部をカスタマイズしました。
config/routes.rb が次のように変更されました:
devise_for :admin_utilisateurs, :controllers => {:registrations => 'admin_utilisateurs/registrations', :sessions => 'admin_utilisateurs/sessions'}
ビューが生成され、app/view/devise/ から /app/view/admin_utilisateurs/ に移動されました
「アクティブな」列を持つために、admin_utilisateurs のモデルと移行もカスタマイズしました。管理者が手動でアカウントを非アクティブ化できるようにします。
基本的に、admin_utilisateur.active 属性が false の場合、ユーザーはサインインできないようにする必要があります。
これにより、次の変更が行われました。
class AdminUtilisateurs::SessionsController < Devise::SessionsController
# Surcharge of 'create' method in Devise::SessionsController
# Example ressource : http://www.communityguides.eu/articles/10
def create
@admin_utilisateur = AdminUtilisateur.find_by_email(params[:email])
if @admin_utilisateur.present? && @admin_utilisateur.active
super
else
flash.now[:alert] = t('devise.failure.desactive')
render :new and return
end
end
end
起こっていることは、Rails が app/controllers/admin_utilisateurs/sessions_controller.rb の正しいカスタマイズされた「作成」メソッドに行くことです。
ユーザーが管理者によって「アクティブ化」されていない場合 (admin_utilisateur.active = false)、正しい FLASH メッセージが表示されますが、RAILS はそれを認証します! そのため、ユーザーはすべてのリソースにアクセスできます。それぞれのコントローラーで命令します。
「作成」メソッドはそうするようにコーディングされていませんが、Rails siはまだ何らかの形で認証しているようです。
どんな助けでも大歓迎です!どうもありがとう