2016-06-06 9 views
7

मेरे पास पोर्ट 5000 पर चल रहा एक node.js एप्लिकेशन है, जहां मैं passport.js को प्राधिकरण के रूप में उपयोग करता हूं। मैं एक पोस्ट अनुरोध है, जहां मैं एक कस्टम कॉलबैक का उपयोग करने से उपयोगकर्ताओं को अधिकृत:विभिन्न बंदरगाहों पर स्थानीय पासपोर्ट प्राधिकरण

this.router.post('/member/login', (req, res, next) => { 
     passport.authenticate('local', (err, member, info) => { 
     if (err) res.json(400).json({message: "An error ocurred"}); 
     if (!member) { 
      console.log("No member found!"); 
      return res.status(409).json({message: "No member found!"}) 
     } 
     req.logIn(member, (err) => { 
      if (err) { 
      console.log(err); 
      return res.status(400).json({message: "An error ocurred"}); 
      } 
      return res.json(member); 
     }); 
     })(req, res, next); 
    }); 

यह ठीक काम करता है, लेकिन जब मैं स्थानीय विकसित मैं एक दृश्यपटल Angular2 आवेदन, जो एक अलग बंदरगाह (4200) पर चलता है, में तो मेरा विकास अधिकृत उपयोगकर्ता प्राप्त करना संभव नहीं है: req.user अपरिभाषित है। मैं अधिकृत उपयोगकर्ता को स्टोर करने के लिए एक्सप्रेस-सत्र का उपयोग करता हूं।

जब मैं तैनात करता हूं तो मैं दोनों अनुप्रयोगों को एक साथ जोड़ता हूं, इसलिए सब कुछ काम करता है।

क्या किसी के पास इस मुद्दे के लिए एक अच्छा और सरल समाधान है? फिर यह केवल विकास में है मुझे यह समस्या है।

+0

उन चीजें * आपके देव पर्यावरण में * एक साथ क्यों चल रही हैं? – m02ph3u5

+0

मैं कोणीय 2 क्ली का उपयोग कर रहा हूं, और यह नहीं जानता कि सर्वर के रूप में अपने स्वयं के नोड का उपयोग करना संभव है, और इसे कैसे सेट अप करें। – DNRN

उत्तर

3

उदाहरण के लिए आप प्रॉक्सी, Nginx के पीछे दोनों सेवाओं को छुपा सकते हैं। और आपकी दोनों सेवाएं 1 पता का उपयोग करेंगी।

nginx config उदाहरण

server { 
    listen 80; 

    server_name example.com; 

    proxy_set_header Host $http_host; 
    proxy_pass_header Server; 
    proxy_set_header X-Forwarded-For $remote_addr; 
    proxy_set_header X-Forwarded-Proto $scheme; 

    location/{ 
    proxy_pass http://frontend_address:port; 
    proxy_redirect default; 
    } 

    location ~ /api { 
    proxy_pass http://backend_address:port; 
    proxy_redirect default; 
    } 
} 

तो सभी अनुरोधों http://example.com सेवा दृश्यपटल के लिए जाना जाएगा, और सभी अनुरोधों को http://example.com/api/ बैकएंड सेवा में जाते हैं।

+0

एक छोटा सा उदाहरण आपके उत्तर की गुणवत्ता को बढ़ावा देगा। – m02ph3u5

+0

यह वास्तव में मैं देख रहा था! धन्यवाद! – DNRN

0

मेरा मानना ​​है कि आपके पास एक क्रॉस-डोमेन समस्या है, क्योंकि आप विभिन्न बंदरगाहों पर चल रहे हैं।

यह समस्या पहले से ही चर्चा की गई है, और मेरा मानना ​​है कि आप एक समाधान यहाँ पा सकते हैं: Passport js fails to maintain session in cross-domain

संक्षेप में, आप का उपयोग कर सकते हेडर की क्रॉस-डोमेन साझा करने की अनुमति के लिए approperiate हेडर भेजने के लिए अपने सर्वर विन्यस्त करने की जरूरत ।

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