2013-04-05 17 views
5

Sinatra belgelerine baktım ve yalnızca HTTP kimlik doğrulamasına başvuruyor gibi görünüyorlar. Bir LDAP sunucusu aracılığıyla yetkilendirilmiş/doğrulanmış bir kullanıcıya dayalı rotalara erişimi kontrol etmek için gerçekten basit bir yol arıyorum.Gerçekten basit bir Sinatra LDAP kimlik doğrulamasını nasıl yaparım?

Zaten onlar varsa, LDAP biraz yapar ve kullanıcı başarıyla doğrulanmış ve nil eğer bir LDAP nesnesi döndüren bir sınıf inşa ettik:

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

ben olmadığını belirlemek için kullanabilir onlar başarıyla doğrulanmış veya değil.

require 'directoryUser' 
require 'sinatra' 

enable :sessions 

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

Sonra sadece 'DirectoryUser' nesne eğer yolları izin vermek istiyorum: Ben LDAP kullanıcı ve parola toplamak için form sağlayan basit Sinatra app içine bu kesikler istediğiniz bir sonraki adım olarak

var: Ben şimdiye kadar bu ancak bir cevap bulmaya çalışırken saatleri geçirdim ve benim için çalışıyor bir şey bulmak gibi olamaz

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

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

.

cevap

2

Herhalde böyle bir şey ile gitmek istiyorum:

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

Süper! - Şimdi deneyeceğim ve nasıl gittiğini anlatayım. Cevap verdiğin için teşekkürler. – user1513388

+1

Bu mükemmel çalıştı - yardım ettiğin için teşekkürler! – user1513388