2012-08-16 12 views
5

मैं दो होस्ट नामों कि मेरे डीएनएस द्वारा एक ही आईपी के लिए भेजा है:ट्विटर पर कैसे एक ही ट्विटर ऐप का उपयोग कर एक डोमेन से एकाधिक होस्टनामों के साथ प्रमाणीकरण करें?

  • theark.info
  • www.theark.info

मैं स्पष्ट रूप में मेरी कॉलबैक और डोमेन नाम सेट मेरी theark.info का उपयोग कर ट्विटर ऐप। क्या, यकीन है कि मैं Oauth www.theark.info प्रयोग करने के लिए एक ही ट्विटर अनुप्रयोग का उपयोग कर सकते बनाने के लिए सबसे अच्छा तरीका है के रूप में मैं इस समय कोई त्रुटि मिलती है:

Internal Server Error

मेरी डीएनएस में मुझे अपनी DNS कि theark.info

के लिए अंक में एक CNAME www है

शायद मुझे अनुरोध पर एक्सप्रेस और जैवक्रिप्ट का उपयोग करके डोम में हेरफेर करने की आवश्यकता है?

+0

कुछ कोड दिखाएं, अधिमानतः न्यूनतम परीक्षण केस। – ebohlman

+0

यह एक कोड मुद्दा नहीं है। यह twitters auth mechanism है, जो केवल एक होस्टनाम, आईआईआरसी को कॉलबैक की अनुमति देता है। आपको कोई कोड देखने की आवश्यकता नहीं है। – EhevuTov

+0

भले ही यह ऑथ तंत्र के साथ कोई समस्या है, आंतरिक सर्वर त्रुटि पर कुछ और विवरण, जैसे कंसोल आउटपुट बेहतर उत्तर प्रदान कर सकता है। – Patrick

उत्तर

2

आप ट्विटर (या किसी अन्य OAuth प्रदाता) को नहीं बदल सकते हैं, वे सभी एक डोमेन में केवल एक कॉलबैक प्रदान करते हैं। एक आसान समाधान http://domain.com से http://www.domain.com तक सभी अनुरोधों को फिर से रूट करना है, इसलिए सभी आगंतुक प्रमाणीकरण से पहले www.domain.com पर समाप्त होते हैं। आप अपने DNS पर या एक req.header रीडायरेक्ट सर्वर साइड के साथ ऐसा करने में सक्षम होना चाहिए:

app.get('/*', function(req, res, next) { 
    if (req.headers.host.match(/^www/) !== null) { 
    res.redirect('http://' + req.headers.host.replace(/^www\./, '') + req.url); 
    } else { 
    next();  
    } 
}) 

this answer से कॉपी किया गया।

जब passport.js से प्रमाणीकृत करने, कॉलबैक यूआरएल निर्दिष्ट करने के लिए प्रयास करें:

passport.use(new TwitterStrategy({ 
    consumerKey: auth_keys.twitter.consumerKey, 
    consumerSecret: auth_keys.twitter.consumerSecret, 
    callbackURL: auth_keys.twitter.callbackURL 
    }, 
    function(token, tokenSecret, profile, done) { 
    process.nextTick(function() { 
     User.twitterAuth({ profile: profile }, function (err, user) { 
     return done(err, user); 
     }); 
    }); 
    } 
)); 

और यकीन है कि callbackURL बिल्कुल वैसा ही ट्विटर में विन्यस्त के रूप में है या नहीं। यदि आप स्थानीयहोस्ट पर विकास के लिए नोड चला रहे हैं, तो दो अलग-अलग कुंजी फ़ाइलों को आज़माएं और 127.0.0.1:3000 के साथ कॉलबैक पते के रूप में ट्विटर पर एक और प्रमाणीकरण ऐप्स बनाएं। आप देव और उत्पादन के लिए मुख्य फाइलों को स्विच कर सकते हैं:

if (app.get('env') == 'development') { 
    auth_keys = require('./lib/keys_dev'); 
} 
if (app.get('env') == 'production') { 
    auth_keys = require('./lib/keys_live'); 
} 
+0

आप कैसे पुनः प्राप्त करते हैं? मेरे ज्ञान के लिए, डीएनएस सिर्फ एक आईपी के लिए हल करता है। यह वास्तव में उस डोमेन नाम को नहीं बदलता है जो आपके ब्राउज़र से बात करता है या जैसा। मेरे पास मेरे DNS में एक CNAME 'www' है जो 'theark.info' को इंगित करता है – EhevuTov

+0

मैंने इस मामले के क्रूक्स का जवाब देने के लिए उत्तर छोटा चुटकी संपादित किया। असल में, मुझे पूरा यकीन है कि इसे सर्वर-साइड HTTP रीडायरेक्ट की आवश्यकता होगी। जवाब के लिए धन्यवाद। – EhevuTov

+0

सीएनएन काम करना चाहिए, है ना? – Patrick

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