2013-04-05 70 views
5

我看着Sinatra文檔,他們似乎只參考HTTP身份驗證。我正在尋找一種非常簡單的方法來基於用戶通過LDAP服務器授權/驗證來控制對路由的訪問。我該如何做一個非常簡單的Sinatra LDAP認證?

我已經建立了一個類,做的LDAP位,如果該用戶成功驗證且無返回LDAP對象,如果他們沒有:

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

我可以用它來確定它們是否已成功驗證或不驗證。

作爲下一步我想拼接成一個簡單的末日應用程序,提供了一個表格來收集LDAP用戶名和密碼這樣的:

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 

我花了幾個小時試圖找到這個答案,但到目前爲止,似乎無法找到任何適合我的東西。

回答

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 2013-04-05 11:06:33

+1

這工作完美 - 感謝您的幫助! – user1513388 2013-04-05 16:52:17