2014-09-14 5 views
7

मेरी समस्या यह है कि मैं आईओएस ऐप से उपयोगकर्ता को प्रमाणीकृत करने के लिए डोरकीपर resource owner credential flow का उपयोग कर रहा हूं। हालांकि मेरे प्रोजेक्ट में दो अलग-अलग उपयोगकर्ता मॉडल हैं (चलिए उन्हें उपयोगकर्ता और व्यवस्थापक कहते हैं)। मेरे कोड इस तरह दिखता है:कई मॉडलों के लिए डोरकीपर संसाधन मालिक प्रमाण पत्र प्रवाह

resource_owner_from_credentials do |routes| 
    user = User.find_for_database_authentication(:email => params[:username]) 
    user if user && user.valid_password?(params[:password]) 
end 

यह काम करता है, लेकिन मैं व्यवस्थापक भी एक चेक कैसे करते हो? दूसरे शब्दों में मुझे नहीं पता कि क्या लॉग इन करने वाला व्यक्ति उपयोगकर्ता या व्यवस्थापक है - मैं दोनों की जांच कैसे करूं?

उत्तर

9

द्वारपाल इस उद्देश्य के लिए कार्यक्षेत्र प्रदान करता है अपने doorkeeper.rb फ़ाइल में (https://github.com/doorkeeper-gem/doorkeeper/wiki/Using-Scopes देखें)

तो तुम कर सकते हैं:

resource_owner_from_credentials do |routes| 
    if params[:scope].present? 
    case params[:scope] 
     when "user" 
     u = User.find_for_database_authentication(:email => params[:email]) 
     when "admin" 
     u = Admin.find_for_database_authentication(:email => params[:email]) 
    end 
    else 
    #default auth 
    u = User.find_for_database_authentication(:email => params[:email]) 
    end 
    u if u && u.valid_password?(params[:password]) 
end 

फिर अपने संसाधन (पूर्व व्यवस्थापक।) आप कर सकते हैं को प्रमाणित करने के लिए इस तरह का अनुरोध करें:

POST $HOST/oauth/token 
{ 
    email: [email protected] 
    password: johndoe 
    grant_type: password 
    scope: admin 
} 
+1

धन्यवाद धन्यवाद! मैंने इसे बहुत समय पहले छोड़ दिया था लेकिन आज मुझे परियोजना को पूरा करना पड़ा। मैं यहां फिर से इस प्रश्न को पोस्ट करने का इरादा रखता हूं और आपका जवाब पाता हूं। मुझे ठीक इसी की तलाश थी। धन्यवाद! –

1

आप इसे अतिरिक्त परम में गुजरकर और मो चुनकर ऐसा करते हैं डेल आप उस परम के आधार पर प्रमाणित करना चाहते हैं। यह गोंडेटो के उत्तर के समान है, लेकिन डोरकीपर में स्कॉप्स का उपयोग बेहतर प्रबंधन के लिए किया जाता है ताकि प्रमाणीकृत ऐप को कौन सी अनुमतियां दी जा रही हों (यानी "इस ऐप को एक्स पढ़ने और आपकी तरफ से वाई लिखने की अनुमति दें")।

यहाँ मैं क्या उपयोग कर रहा हूँ

resource_owner_from_credentials do |routes| 
    if params[:user_type].present? 
    case params[:user_type] 
    when 'user' 
     u = User.find_for_database_authentication(email: params[:email]) 
    when 'employer' 
     u = Employer.find_for_database_authentication(email: params[:email]) 
    when 'admin' 
     u = Administrator.find_for_database_authentication(email: params[:email]) 
    end 
    end # I don't want a default auth user_type, so no 'else' block for me 
    user if user && user.valid_password?(params[:password]) 
end 

ध्यान दें कि एक परम कि द्वारपाल पहले से ही कुछ और के लिए उपयोग नहीं कर रहा है के बजाय कार्यक्षेत्रों का उपयोग कर यह करने के लिए यदि आप थे, तो आप स्कोप कॉन्फ़िगर करना होगा जैसे:

# These are found in doorkeeper.rb, but they're commented by default. 
# You would use whatever scopes you're wanting to check 
default_scopes :public 
optional_scopes :write, :update 

उपयोगकर्ता और व्यवस्थापक के बीच अंतर करने doorkeeper.rb में default_scopes या optional_scopes jiggering बिना काम कर सकते हैं, लेकिन केवल scoping कि द्वारपाल उम्मीद का एक पक्ष प्रभाव के रूप में एक परम के रूप में गुंजाइश का उपयोग करना।

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