2017-01-16 29 views
8

में पासपोर्ट जेएस सत्र डेटा पिछला अंत तक पासपोर्ट सत्र सूचनाएं भेजने का सबसे अच्छा तरीका क्या है?Angular2

मेरा आवेदन जो पोर्ट 3000 पर काम करता है। पहले दो फेसबुक लॉगिन और पुनर्निर्देशन के लिए हैं।

app.get('/auth/facebook', passport.authenticate('facebook', { scope : 'email' })); 

app.get('/auth/facebook/callback', 
     passport.authenticate('facebook', { 
      successRedirect : 'http://localhost:8000/', 
      failureRedirect : '/fail' 
     }) 
); 

app.get('/auth/userdata', isLoggedIn, function(req, res) { 
    Donator.findById(req.user, function(err, fulluser) { 
     if (err) throw err; 
     res.json(fulluser); 
    }) 
}); 

function isLoggedIn(req, res, next) { 
    if (req.isAuthenticated()) { 
     next(); 
    } else { 
     res.json(false); 
    } 
}; 

पासपोर्ट config.js

'facebookAuth' : { 
     'clientID'  : 'secret', 
     'clientSecret' : 'secret', 
     'callbackURL' : 'http://localhost:3000/auth/facebook/callback' 
    }, 

तो मेरी Angular2 आवेदन में: अगले एक डेटाबेस से उपयोगकर्ता डेटा (प्रयोक्ता आईडी req.user में संग्रहित किया जाना चाहिए)

routes.js प्राप्त करने के लिए है मैं http://localhost:3000/auth/facebook पर जा सकता हूं, एफबी लॉगिन पेज पर रीडायरेक्ट किया जा सकता है और यदि सफलता http://localhost:3000/auth/login/callback पर रीडायरेक्ट की जाती है जो मुझे http://localhost:8000/ पर ले जाती है।

और मेरे Angular2 अनुप्रयोग है कि बंदरगाह 8000

getUser(){ 
    this.http.get('http://localhost:3000/auth/userdata') 
    .map(res => return res.json()) 
} 

हर getUser() पर काम करता है में कहा जाता है, यह रिटर्न 'असत्य'। क्या इस सत्र डेटा को अलग-अलग बंदरगाह पर मेरे फ्रंटएंड पर "इंजेक्ट" करने का एक आसान और सुरक्षित तरीका है? साथ ही जब मैं ब्राउज़र में http://localhost:3000/auth/userdata पर जाता हूं तो मैं यह प्रोफ़ाइल JSON के रूप में प्रस्तुत कर सकता हूं।

जब मैं उसी पोर्ट पर बैकएंड और फ्रंटेंड सेट करता हूं तो यह काम करता है, फेसबुक, ट्विटर, गूगल, स्थानीय, सब कुछ ठीक है और getUser पूर्ण उपयोगकर्ता प्रोफ़ाइल देता है।

मुझे उम्मीद है कि यह स्पष्ट है।

+0

पोर्ट '3000' पर आप अपने कोणीय 2 ऐप की सेवा क्यों नहीं करते? –

+1

मैं फ्रंटेंड को अब अलग मेजबानों पर बैकएंड समाप्त करना चाहता हूं। – dmh126

+0

मैं एक ही बंदरगाह पर सबकुछ चलाने का सुझाव दूंगा। आपके पास अलग-अलग बंदरगाहों पर दो सर्वर हो सकते हैं, लेकिन [एक्सप्रेस-http-proxy] (https://www.npmjs.com/package/express-http-proxy) का उपयोग करके उनमें से एक को प्रॉक्सी कर सकते हैं। –

उत्तर

4

यह कोणीय 2 में अनुरोधों में एक समस्या थी। मैंने प्रत्येक अनुरोध में प्रमाण-पत्र जोड़े हैं:

getUser(){ 
    this.http.get('http://localhost:3000/auth/userdata', {withCredentials: true}) 
    .map(res => return res.json()) 
} 

और अब यह ठीक है।

+0

हाय हल कर सकते हैं हाय, मैंने {withCredentials: true} भी जोड़ा है मेरे अनुरोध में, लेकिन फ्रिस्ट कॉर्स समस्या पर जाएं, लेकिन फिर res.header ('एक्सेस-कंट्रोल-ऑब्जेक्ट-ओरिजिन', 'http: // localhost: 4200') जोड़ना; सर्वर में मुझे req.is प्रमाणीकृत() झूठा मिलता है। आप इस समस्या को कैसे हल करते हैं? –

+0

मुझे अपने रर्स विकल्पों में 'res.header ('एक्सेस-कंट्रोल-स्वीट-मेथड', 'गेट, पुट, पोस्ट, डिलीट, ऑप्शन') मिला है। और यह काम कर रहा है, POST अनुरोध के लिए आपको 'विकल्प = नए अनुरोध विकल्प ({शीर्षलेख: शीर्षलेख, प्रमाण-पत्र: सत्य}) जैसे विकल्प शामिल करना चाहिए। – dmh126