2012-12-11 12 views
7

मैं एक एप्लिकेशन चला रहा हूं जो कई subdomains usergroupXYZ.onruby.de पर चलता है और उपनाम के रूप में मनमानी डोमेन का भी समर्थन करता है। ताकि आप yourusergroup.onruby.de या customdomain.de के माध्यम से डोमेन तक पहुंच सकें।एकाधिक डोमेन के साथ github oauth

ऐप ट्विटर oauth और github oauth2 के माध्यम से लॉगिन प्रदान करता है।

समस्या यह है कि मुझे कस्टम डोमेन के माध्यम से github auth का समर्थन करने का कोई तरीका नहीं मिला। मैं हमेशा github से redirect_uri_mismatch त्रुटियां प्राप्त करता हूं।

ट्विटर लेखक को किसी भिन्न डोमेन पर रीडायरेक्ट करने में कोई समस्या नहीं है।

क्या किसी को भी इस समस्या का समाधान है प्रत्येक कस्टम डोमेन के लिए एक github अनुप्रयोग टोकन बनाने के अलावा?

उत्तर

9

आप कॉलबैक यूआरएल को ओवरराइड कर सकते हैं लेकिन इसे ओथ एप्लिकेशन सेटिंग्स में होस्ट नाम से मेल खाना चाहिए। यह दस्तावेज़ अच्छे और बुरे मैचों की एक सूची देता है: http://developer.github.com/v3/oauth/#redirect-urls

विभिन्न संदर्भों की अनुमति होने के बाद, एक समाधान बेस कॉलबैक यूआरएल पर विभिन्न संदर्भ बनाने और फिर विशिष्ट होस्ट पर रीडायरेक्ट करने के लिए संदर्भ जानकारी का उपयोग करना होगा। इसका मतलब यह होगा कि आप 'ब्रोकर' की तरह अभिनय करेंगे और कुछ होस्ट को लक्षित मेजबान को पास करने की आवश्यकता होगी।

यदि आपका कॉलबैक यूआरएल oauth.onruby.de है, तो oauth.onruby.de/cust1 और oauth.onruby.de/cust2 गिथब के अनुसार मान्य होगा। फिर आप /cust1 से cust1.de और /cust2 से cust2.de पर रीडायरेक्ट कर सकते हैं।

कृपया ध्यान रखें कि oauth.onruby.de गेटवे या ब्रोकर के रूप में कार्य करेगा और इसे सुनिश्चित करना होगा कि कोई सुरक्षा एक्सपोजर नहीं है।

+0

इसे चेक आउट करेगा – phoet

1

हाँ हमने अकबर ने सुझाव दिया था। हमारे पास दो साइटें हैं, xxx.com और xxx.co.uk और हम दोनों साइटों OAuth के लिए एक github ऐप का उपयोग करना चाहते हैं।

हमने रेल और ओमनीएथ मणि का उपयोग किया।

पहली बात यह है कि हम क्या करने की जरूरत कॉलबैक URL

class OmniAuth::Strategies::GitHub 
    # Some code are omitted  

    def callback_url 
    url = super 
    matches = url.match(/xxx\.([a-z|\.]+)(:\d+)?\//) 
    if matches && matches[1] != 'com' 
     tld = matches[1] 
     url.gsub!("xxx.#{matches[1]}", 'xxx.com') 
     url << "/#{tld}" 
    end 

    url 
    end 
end 

के अंत तक com या co.uk संलग्न करने के लिए है और यहां रेल मिडलवेयर कोड अनुप्रेषित जब GitHub OAuth वापस कॉल

def call(env) 
    match = env["PATH_INFO"].match(/\A\/users\/auth\/github\/callback\/(.+)\Z/) 
    if match 
     host = env["HTTP_HOST"] 
     [301, {"Location" => "#{env['rack.url_scheme']}://#{host.gsub('com', match[1])}/users/auth/github/callback?#{env["QUERY_STRING"]}"}, self] 
    else 
     @app.call(env) 
    end 
end 
करता है कि