0

コントローラーで ssh 接続を確立し、接続が正常に確立された場合にビューを表示しています。接続が確立されていない場合は、「denied_access」ビューにリダイレクトするアクションが必要です。使用者が詳細を入力するビューは次のとおりです。

<%= form_for :check_validity, :method => "get", :url => {:action => "check_validity"} do |f| %>
//enters user name and password here and submits
<% end%>

コントローラーの有効性チェックアクション:

 def check_validity
     @USER = params[:check_validity][:username]
     @PASS = params[:check_validity][:password]
     @DOMAIN = params[:check_validity][:domain]
     @HOST = 'hostname'

     Net::SSH.start( @HOST, @USER, :password => @PASS ) do|ssh|

     @result = ssh.exec!("/lclapps/oppen/http/ldap-group-list-2.4.3.py #{@DOMAIN} #{@USER} #{@PASS}")
     end
        respond_to do |format|
         if(@result =~ /Informatica Developer/)
          format.html{redirect_to display_command_list_path({:username => @USER})}
         else
          format.html{redirect_to denied_access_path}
         end
         end
  end

ここで接続が確立され、resutl 内の Informatica Developer 文字列がチェックされ、にリダイレクトされdisplay_command_list_pathます。しかし、この文字列を確認する前に接続が確立されているかどうかを確認し、接続が確立されていない場合は denied_access_path にリダイレクトしたいと考えています。どうやってやるの?

4

1 に答える 1

2

接続しようとすると、資格情報が無効な場合に例外が発生しますNet::SSH.startNet::SSH::AuthenticationFailed

begin
  Net::SSH.start( @HOST, @USER, :password => @PASS ) do |ssh|
    # ...
  end
rescue Net::SSH::AuthenticationFailed => e
  # redirect to denied_access_path
end

# your respond_to block ...

@HOSTまた、が悪い場合はが発生しSocketErrorます。そのために、上記のコードに 2 番目のレスキューを追加できます。

于 2012-07-09T16:25:56.037 に答える