2013-04-05 7 views
5

私はSinatraのドキュメントを見て、HTTP認証を参照するように見えます。私は、LDAPサーバーを介して許可/認証されているユーザーに基づいてルートへのアクセスを制御する本当に簡単な方法を探しています。彼らならば、私が判断するためにこれを使用することができシンプルなSinatra LDAP認証を行うにはどうしたらいいですか?

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

:私はすでにLDAPのビットを行い、ユーザが正常に認証され、nilにしている場合、彼らは持っていない場合は、LDAPオブジェクトを返すクラスを構築しました

正常に認証されたかどうか。

私はLDAPのユーザーとパスワードを収集するためのフォームを提供する単純なシナトラアプリにこれをスプライスしたい次のステップとして:

require 'directoryUser' 
require 'sinatra' 

enable :sessions 

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

は、その後、私は「DirectoryUser」オブジェクト場合のルートだけを許可したいです存在します:

これまでの回答を見つけようと数時間を費やしてきましたが、私のために何かを見つけることができないようです。

答えて

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 
+0

素晴らしいです! - 私は今それを試して、それがどのように行くかを教えてあげます。応答していただきありがとうございます。 – user1513388

+1

これは完璧に機能しました。 – user1513388

関連する問題