0

公式の指示に従って、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はまだ何らかの形で認証しているようです。

どんな助けでも大歓迎です!どうもありがとう

4

1 に答える 1

0

わかりました、私が見る唯一の説明は、デバイスコントローラーの上部にあるこのprepend_before_filter呼び出しに関するものです:

prepend_before_filter :allow_params_authentication!, :only => :create

RDoc は次のように述べています。その特定のページで params 認証が許可されていることをワーデンに伝えてください。

ウォーデンの仕組みもよくわかりません。

ともかく !

私はwikiによって与えられた別の解決策で私の問題を解決しました:sign_inの前に管理者にアカウントを有効にする必要があります

そのため、移行をロールバックしました。列 :desactive が :approved になるように ii を変更しました。移住します。モデル app/models/admin_utilisateur.rb を次のように変更しました。

def active_for_authentication? 
  super && approved? 
end 

def inactive_message 
  approved?  ? super : :not_approved 
end

必要なキーを config/locales/fr.yml に追加しました

そして、それはうまくいきます!!! 簡単にするのはいつもとても難しく、難しくするのは簡単なのはなぜですか ;-)

于 2012-10-23T16:08:59.680 に答える