2013-04-05 9 views
5

Spojrzałem na dokumenty Sinatry i wydaje się, że tylko odwołują się do uwierzytelniania HTTP. Szukam naprawdę prostego sposobu kontrolowania dostępu do tras w oparciu o autoryzację użytkownika/uwierzytelnienie za pośrednictwem serwera LDAP.Jak wykonać naprawdę proste uwierzytelnianie Sinatra LDAP?

Już zbudowany klasy, która robi się trochę LDAP i zwraca obiekt LDAP, jeśli użytkownik został pomyślnie uwierzytelniony i zero, jeśli nie mają:

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

mogę to wykorzystać w celu ustalenia, czy z powodzeniem uwierzytelniono lub nie.

Jako następny krok chcę splatać to w prosty app Sinatra, który dostarcza formularz do zbierania użytkownika LDAP i hasło:

require 'directoryUser' 
require 'sinatra' 

enable :sessions 

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

Potem chcesz zezwolić tylko trasy, jeśli obiekt do „DirectoryUser” istnieje:

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

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

spędziłem godziny próbuje znaleźć odpowiedź na to pytanie, ale do tej pory i nie wydaje się znaleźć coś, że pracuje dla mnie.

Odpowiedz

2

pewnie bym iść z czymś takim:

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

Superb! - Spróbuję teraz i dam ci znać, jak to działa. Dziękuję za odpowiedź. – user1513388

+1

To działało idealnie - dzięki za pomoc! – user1513388

Powiązane problemy