5

Sinatra のドキュメントを見たところ、HTTP 認証のみを参照しているようです。LDAPサーバーを介して承認/認証されているユーザーに基づいて、ルートへのアクセスを制御する非常に簡単な方法を探しています。

LDAP ビットを実行し、ユーザーが正常に認証された場合は LDAP オブジェクトを返し、そうでない場合は nil を返すクラスを既に作成しました。

>>DirectoryUser.authenticate('user', 'password')
#<DirectoryUser:0x007ffb589a2328>

これを使用して、認証に成功したかどうかを判断できます。

次のステップとして、LDAP ユーザーとパスワードを収集するためのフォームを提供するシンプルな Sinatra アプリにこれをつなぎ合わせたいと思います。

require 'directoryUser'
require 'sinatra'

enable :sessions

  get '/form' do
    username        = params[:username]
    password     = params[:password]
    haml :form
  end

次に、「DirectoryUser」オブジェクトが存在する場合にのみルートを許可します。

get '/protected' do # Only if DirectoryUser object exists 
    "This route is protected"
end

get '/unprotected' do  
    "This route is unprotected"
end

これに対する答えを見つけるのに何時間も費やしましたが、これまでのところ、自分に合ったものを見つけることができないようです.

4

1 に答える 1

2

私はおそらく次のようなものに行きます:

require 'directoryUser'
require 'sinatra'

enable :sessions

helpers do
  def authorize!
    redirect(to('/login')) unless session[:user_id]
  end
end

get '/login' do
  haml :login # with the login form
end

post '/login' do
  user = DirectoryUser.authenticate(params[:username], params[:password])

  if user
    session[:user_id] = user.id
    # Or: session[:logged_in] = true, depending on your needs.
    redirect to('/protected')
  else
    redirect to('/login')
  end
end

get '/protected' do
  authorize!
  'This route is protected'
end

get '/unprotected' do  
  'This route is unprotected'
end
于 2013-04-05T10:58:44.753 に答える