2

ログイン プロセス中に LDAP エラーが発生した場合、「現在、システムはログオンできません。後でもう一度試してください」のようなエラー メッセージを表示するログイン ページを表示したいと考えています。

現在、 https://github.com/plataformatec/devise/wiki/How-To: -Redirect-to-a-specific-page-when-the-user- can- で説明されているように、custom_failure.rb アプローチを使用してい ます。認証されておらず 、無効なユーザー名/パスワードなどのエラーをキャッチでき、問題なく必要に応じてエラーメッセージを表示するログインページにリダイレクトしました。しかし、このアプローチでは LDAP エラーをキャッチできません。

これらの LDAP エラーは、次のような生の HTML ページとして表示されます。

Errno::ETIMEDOUT in Devise::SessionsController#create

接続先が一定時間後に適切に応答しなかったために接続の試行が失敗したか、接続されたホストが応答しなかったために確立された接続が失敗しました。-接続(2)

Rails.root: C:/extratxt/2.2.0/source/ruby/messaging アプリケーション トレース | フレームワーク トレース | 完全なトレース

リクエスト

パラメーター:

{"utf8"=>"✓",
 "user"=>{"username"=>"administrator",
 "password"=>"[FILTERED]",
 "remember_me"=>"0"},
 "commit"=>"Sign in"}

セッションダンプを表示

環境ダンプ応答を表示

ヘッダー:

なし

これを防ぎ、代わりに指定したページ (たとえば、独自のエラー メッセージを含むログイン ページ) を表示するにはどうすればよいですか? 何か案が ?ありがとう

4

1 に答える 1

2

1 つの方法は、セッションの作成アクションをオーバーライドすることですが、それを機能させるにはいくつかの手順が必要です。最初に、デバイス ビューをコピーします (まだ行っていない場合)。

rails g devise:views

次に、Devise::SessionsController を拡張する sessions_controller.rb ファイルを作成する必要があります。

# /app/controllers/sessions_controller.rb
class SessionsController < Devise::SessionsController

  # copied from [...]/gems/devise-1.4.5/app/controllers/sessions_controller.rb
  # To find the path to your gem, use 'bundle show devise' 
  def create

    begin
      resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")
      set_flash_message(:notice, :signed_in) if is_navigational_format?
      sign_in(resource_name, resource)
      respond_with resource, :location => redirect_location(resource_name, resource)
    rescue Net::LDAP::LdapError
      # handle your error
      respond_to do |format|
        format.html { redirect_to new_user_session_path, :notice => $!.to_s }
        format.json { render json: $!.to_s }
      end
    end

  end
end

最後に、config/routes.rb で、devise にカスタマイズしたコントローラーを使用するように指示する必要があります。

devise_for :users, :controllers => { :sessions => :sessions }
于 2012-11-06T15:18:50.313 に答える