2013-04-05 8 views
5

Ho guardato i documenti di Sinatra e sembrano solo fare riferimento all'autenticazione HTTP. Sto cercando un modo davvero semplice per controllare l'accesso alle rotte in base a un utente autorizzato/autenticato tramite un server LDAP.Come posso fare un'autenticazione Sinatra LDAP veramente semplice?

ho già costruito una classe che fa la punta LDAP e restituisce un oggetto LDAP se l'utente è autenticato e nullo con successo se non l'hanno:

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

posso usare questo per determinare se Sono stati autenticati o meno con successo.

Come passo successivo voglio impiombare questo in una semplice applicazione Sinatra che fornisce un modulo per raccogliere l'utente LDAP e la password:

require 'directoryUser' 
require 'sinatra' 

enable :sessions 

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

allora voglio consentire solo le rotte se l'oggetto del 'DirectoryUser' esiste:

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

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

ho passato ore a cercare di trovare una risposta a questo, ma finora e non riesco a trovare qualcosa che funziona per me.

risposta

2

probabilmente sarei andare con qualcosa di simile:

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! - Ci proverò ora e ti faccio sapere come va. Grazie per la risposta. – user1513388

+1

Questo ha funzionato perfettamente - grazie per l'aiuto! – user1513388