2013-05-31 14 views
9

पर जाता है मैं फेसबुक प्रमाणीकरण के साथ नोड, एक्सप्रेस और पासपोर्ट का उपयोग कर रहा हूं।
मैं निम्नलिखित मार्गों (कॉलबैक यूआरएल /facebook/auth/callback है जब) है:पासपोर्ट प्रमाणीकरण विफलता रीडायरेक्ट लूप

function render(page, req, res) { 
    var user = null; 
    if (req.user) { 
     user = req.user.toObject(); 
     user.isLoggedIn = true; 
    } 
    res.render(page, { user: user }); 
} 
app.get('/auth-failure', function (req, res) { 
    res.render('auth-failure'); 
}); 
app.get('/auth-success', function (req, res) { 
    render('auth-success', req, res); 
}); 
app.get('/facebook/auth', passport.authenticate('facebook', { scope: [ 'email', 'user_about_me', 'publish_actions']})); 
app.get('/facebook/auth/callback', passport.authenticate('facebook', { failureRedirect: '/auth-failure', successRedirect: '/auth-success' })); 

जब प्रमाणीकरण सफल रहा पेज auth-success दृश्य मिला के रूप में मैं उम्मीद थी। लेकिन जब प्रमाणीकरण विफल हुआ और फेसबुक वापस आ गया: http://localhost:3000/facebook/auth/callback?error_code=2102&error_message=User+is+not+a+test+user+owned+by+the+application#=

मुझे auth-failure दृश्य नहीं मिला है! इसके बजाय, फ़ायरफ़ॉक्स मुझे रिटर्न पेज: enter image description here

मैं चीजों की जांच करने के लिए प्रयास करें और मैं करने के लिए विफलता रूटर की जगह:

app.get('/facebook/auth/callback', function (req, res) { 
    res.redirect('/auth-failure'); 
}); 

enter image description here

जब क्रोम में चल रहा है, मैं संदेश मिलता है

और इसने auth-failure सफलतापूर्वक देखें।
passport.js फेसबुक विफलता प्रमाणीकरण के साथ समस्या क्या है?
यह मुझे त्रुटि पृष्ठ क्यों देता है?

@Matt Bakaitis टिप्पणी करने के बारे में:
यहाँ मुझे क्रमानुसार और कार्यों deserialize है:

// serialize sessions 
passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done) { 
    User.findOne({ _id: id }, function (err, user) { 
     done(err, user); 
    }); 
}); 
+0

यह उदाहरण काम करता दिखाई देता है हालांकि फ़ायरफ़ॉक्स में। – jhtong

+0

@toiletfreak: मैंने फ़ायरफ़ॉक्स में इस गलत व्यवहार की छवि संलग्न की है। – Naor

+0

क्या आपने पासपोर्ट.serialize या passport.deserialize कोड बदल दिया था? –

उत्तर

1

मेरा मानना ​​है कि यह है, क्योंकि आप एक कस्टम कॉलबैक का उपयोग कर और एक रेस की तरह वस्तु उपलब्ध कराने की आवश्यकता कर रहे हैं। ...

app.get('/facebook/auth/callback', function(req, res, next) { 
     passport.authenticate('facebook',.............. 
+0

लेकिन मैं वही कर रहा हूं जो यहां लिखा गया है: http://passportjs.org/guide/facebook/ – Naor

1

मैं तार पर वास्तव में क्या भेजा जाता है यह देखने के लिए Fiddler को आग लगा दूंगा।

1

अधिक शोध करना, क्योंकि मैं एक फेसबुक (और अन्य) के साथ एकीकृत करने के लिए passport.js का भी उपयोग करता हूं, ऐसा लगता है कि यह पासपोर्ट-ओथ (जो पासपोर्ट-फेसबुक उपयोग करता है) के लिए पहले से ही open issue हो सकता है।

व्यक्ति समस्या प्रवेश करने line 98 of the oauth2 code पर त्रुटि जाँच के लिए एक समाधान था:

app.get('/auth/facebook', passport.authenticate('facebook')); 
    app.get('/auth/facebook/callback', 
      , function(req, res, next) { 
        if (req.query && !req.query.error && req.query.error_code) { 
         req.query.error = true; 
        } 
        next(); 
      } 
      , passport.authenticate('facebook', { failureRedirect: '/auth-failure', successRedirect: '/auth-success' } 
    ); 

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

+0

कोड में कोई त्रुटि है? इसमें एक कोष्ठक या कुछ पसंद है? – zehelvion

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