2012-10-13 21 views
5

मैं एक्सप्रेस के साथ पासपोर्ट के लिए पासपोर्ट-लिंक्डइन रणनीति का उपयोग कर रहा हूं, ताकि उपयोगकर्ता अपनी लिंक्डइन प्रोफाइल में लॉग इन कर सकें।पासपोर्ट रणनीति callbackURL के लिए वर्तमान होस्ट कैसे सेट करें?

passport.use(new LinkedInStrategy({ 
    consumerKey: config.linkedin.LINKEDIN_API_KEY, 
    consumerSecret: config.linkedin.LINKEDIN_SECRET_KEY, 
    callbackURL: "http://localhost:3000/auth/linkedin/callback" 
    }, 
    function(token, tokenSecret, profile, done) { 
    // asynchronous verification, for effect... 
    process.nextTick(function() { 

     // To keep the example simple, the user's LinkedIn profile is returned to 
     // represent the logged-in user. In a typical application, you would want 
     // to associate the LinkedIn account with a user record in your database, 
     // and return that user instead. 
     return done(null, profile); 
    }); 
    } 
)); 

लाइन 4 पर, मैं मैन्युअल रूप से पूर्ण कॉलबैक URL सेट करने के लिए:

मैं निम्नलिखित कोड है। मेरे पास उत्पादन के लिए एक स्ट्रिंग थी और विकास के लिए एक था, लेकिन मेरे यूआरएल बदलते रहते हैं, और बंदरगाह करते हैं (मैं विकसित करने के लिए 2 मशीनों का उपयोग करता हूं)।

मैं URL (http://localhost:3000) का पहला भाग स्वचालित रूप से कैसे सेट कर सकता हूं? क्या express या app की कोई संपत्ति है जो मुझे ऐसा करने की अनुमति देगी? क्या मुझे app.use(function(req, res){}); का सहारा लेना है?

धन्यवाद!

उत्तर

4

पुराना प्रश्न, संभवतः वाई उत्तर केवल नए संस्करणों के लिए मान्य है। लेकिन अगर किसी को इस में चलाता है, मेरी तरह, समाधान सिर्फ callbackURL में एक होस्ट नाम निर्दिष्ट नहीं है:

passport.use(new LinkedInStrategy({ 
    consumerKey: config.linkedin.LINKEDIN_API_KEY, 
    consumerSecret: config.linkedin.LINKEDIN_SECRET_KEY, 
    callbackURL: "/auth/linkedin/callback" 
    }, 

इस Heroku https के लिए काम करने के लिए प्राप्त करने के लिए पुन: निर्देशित, हम x-forwarded-protocol हेडर पर भरोसा करने के लिए सिस्टम को बताने के लिए है , प्रॉक्सी पर भरोसा करके:

passport.use(new LinkedInStrategy({ 
    consumerKey: config.linkedin.LINKEDIN_API_KEY, 
    consumerSecret: config.linkedin.LINKEDIN_SECRET_KEY, 
    callbackURL: "/auth/linkedin/callback", 
    proxy: true 
    }, 
+2

यदि आपका ऐप रूट पथ पर नहीं चल रहा है, तो यह काम नहीं करता है, उदाहरण के लिए यह '/' के बजाय '/ myapp' पर चल रहा है। –

0

मेरी config.js में मैं एक cfg.site_url है, कि एक ही रास्ता है, या यदि आप में एक अनुरोध वस्तु है आप

http://expressjs.com/api.html#req.host

// Host: "example.com:3000" 
req.hostname 
// => "example.com" 

सुनिश्चित नहीं हैं कि req.host पर दिखाई दे सकता है आपके वहाँ संदर्भ।

+0

मैंने कॉन्फ़िगर स्ट्रिंग के साथ शुरुआत की, लेकिन सर्वर नाम और बंदरगाह बदलते रहते हैं। मैं ऐप स्तर पर हूं - जहां तक ​​मुझे पता है, एक req प्राप्त करने का एकमात्र तरीका है, उस ऐप का उपयोग करना है। समस्या यह है कि इसे हर अनुरोध के लिए बुलाया जाता है। –

+0

आप अपने अनुरोध के लिए एक मिडलवेयर प्रदान कर सकते हैं। कुछ 'app.get ('/जो भी ', loadConfigVariable, routes.whatever);' और 'app.locals.whatever = config.whatever' लोड के अंदर कुछ भी कॉन्फ़िगर करें। – chovy

+0

यही वह है जिसे मैं टालने की कोशिश कर रहा था - एक और मार्ग। मुझे आश्चर्य है कि क्या मैं पासपोर्ट में ही कार्यक्षमता पा सकता हूं? –

0

ने अंततः यूआरएल और वास्तविक बंदरगाह के टुकड़ों से कॉलबैक यूआरएल को गतिशील रूप से निर्माण करके हल किया। इस समाधान से खुश नहीं है क्योंकि यह गैर-सुरुचिपूर्ण दिखता है, लेकिन मिडलवेयर उपयोग कॉल को जोड़ने के बिना वास्तविक यूआरएल प्राप्त करने का कोई तरीका नहीं मिल सका (जो मुझे यकीन है कि एक सरल स्ट्रिंग कॉन्सटेनेशन से अधिक प्रदर्शन को प्रभावित करता है)।

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