2013-04-05 6 views
5

मैंने सिनात्रा दस्तावेज़ों को देखा और वे केवल HTTP प्रमाणीकरण का संदर्भ लेते हैं। मैं एक एलडीएपी सर्वर के माध्यम से अधिकृत/प्रमाणीकृत उपयोगकर्ता के आधार पर मार्गों तक पहुंच नियंत्रित करने का एक बहुत ही आसान तरीका ढूंढ रहा हूं।मैं वास्तव में एक सरल सिनात्रा एलडीएपी प्रमाणीकरण कैसे कर सकता हूं?

मैं पहले से ही एक वर्ग है कि 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

+1

यह पूरी तरह से काम किया - मदद करने के लिए धन्यवाद! – user1513388

संबंधित मुद्दे