2014-07-06 15 views
9

मैं एक फोनगैप एप्लिकेशन बना रहा हूं जिसमें सर्वर की तरफ नोडज होगा। मैं पासपोर्ट-फेसबुक रणनीति का उपयोग करके लॉगिन लागू करना चाहता था लेकिन उनके कॉलबैक दो मार्ग,/success सफलतापूर्वक और/विफलता को निर्दिष्ट करते हैं। एक पृष्ठ एप्लिकेशन होने के कारण, यह उपयोगकर्ताओं को इतनी और इतनी पेज पर रीडायरेक्ट करने में बहुत भ्रमित कर देता है।रीडायरेक्शन के बिना पासपोर्ट-फेसबुक लॉगिन का उपयोग कैसे करें?

मैं सर्वर से स्थिर फ़ाइलों (index.html, login.html) की सेवा नहीं करना चाहता हूं बल्कि उन्हें क्लाइंट पर रखना चाहता हूं और क्लाइंट से AJAX कॉल करने के लिए कहता हूं। अब तक, मैं AJAX अनुरोध के रूप में/auth/facebook कॉल करने में सक्षम हूं लेकिन मुझे उसी अनुरोध पर कोई प्रतिक्रिया नहीं मिल सकती है क्योंकि लॉगिन रणनीति को उपयोगकर्ता को पुनर्निर्देशित करने की आवश्यकता होती है। मैं सफल लॉगिन पर उपयोगकर्ता को उपयोगकर्ता_आईडी या नाम वापस भेजना चाहता हूं या विफलता पर उसे लॉगिन फॉर्म (जो फोनगैप में www निर्देशिका पर भी है) दिखाएं। लेकिन पुनर्निर्देशन और सीओआरएस त्रुटियां मुझे ऐसा करने से रोक रही हैं। क्या मैं इसे लागू कर सकता हूं? मैंने कुछ हफ्तों के बाद से इसकी तलाश की है, लेकिन कोई सफलता नहीं है। मैं वास्तव में आपकी मदद की सराहना करता हूं!

पीएस: मैं नोड सर्वर से सभी एचटीएमएल और स्थैतिक सामग्री भेजने से बचाना चाहता हूं।

संपादित करें: बेहतर समझ के लिए लॉगिन कोड जोड़ना:

app.get('/userpage', utility.isLoggedIn, function(req, res) 
{ 
    res.send('User:'+req.user); 
}); 

app.get('/', utility.isLoggedIn, function(req, res) 
{ 
    res.redirect('/userpage'); 
}); 

app.get('/auth/facebook', passport.authenticate('facebook')); 

app.get('/auth/facebook/callback',passport.authenticate('facebook', 
{ 
    successRedirect : '/', 
    failureRedirect : '/login' 
})); 

app.get('/logout', function(req, res) 
{ 
    req.logout(); 
    res.redirect('/login'); 
}); 


utility.isLoggedIn: 
function isLoggedIn(req, res, next) 
{ 
    if (req.isAuthenticated()) 
    return next(); 

    res.redirect('/login'); 
} 
+1

इस समस्या को हल किया? मैं एक समान दृष्टिकोण में रूचि रखता हूं ... –

+0

कोई उपयोगकर्ता आपके फेसबुक ऐप को AJAX अनुरोध के माध्यम से अनुमतियों की अनुमति कैसे देगा? क्या होगा यदि उपयोगकर्ता पहले से ही फेसबुक में लॉग इन नहीं किया गया था, तो वे AJAX अनुरोध के माध्यम से कैसे लॉग इन करेंगे? पाठ्यक्रम के इन सवालों का जवाब यह है: वे नहीं कर सके। और यही कारण है कि आप AJAX का उपयोग कर किसी भी OAuth प्रदाता के माध्यम से किसी उपयोगकर्ता को प्रमाणीकृत करने में सक्षम नहीं होंगे। – idbehold

उत्तर

0

इसके बजाय मानक पुनर्निर्देशन पासपोर्ट द्वारा की पेशकश का उपयोग करने का, आप अपने खुद के समारोह जो पुनर्निर्देशन के बजाय निष्पादित किया जाएगा परिभाषित कर सकते हैं। यहां बताया गया है कि कोड की तरह

passport.authenticate('login', function(err, user, info) { 
     if (err) { return next(err); } 
     if (!user) { return res.json({ status:"failed", "error": "Invalid credentials" }); } 

// req/res held in closure 
     req.logIn(user, function(err) { 
      if (err) { return next(err); } 

      return res.json({ "status":"success"}); 
     }) 
})(req, res, next); 
0

लगेगा का एक उदाहरण आप ऐसा नहीं कर सकते फेसबुक oAuth साथ है, लेकिन फेसबुक another login solution जहां एक टोकन का अनुरोध करने के अपने क्लाइंट ऐप कोड कर सकते हैं प्रदान करता है, कि आप बाद में मान्य कर सकते हैं passport-facebook-token के साथ सर्वर।

इस तरह आप उस कष्टप्रद पुनर्निर्देशन के बिना लगातार सत्रों के लिए पासपोर्ट के फायदों का उपयोग कर सकते हैं।

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