2013-10-22 6 views
6

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

var express = require('express'); 
var routes = require('./routes'); 
var user = require('./routes/user'); 
var facebook = require('./routes/facebook'); 
var login = require('./routes/login'); 
var http = require('http'); 
var path = require('path'); 

var app = express(); 

/* Configuration stuff here*/ 

// development only 
if ('development' == app.get('env')) { 
    app.use(express.errorHandler()); 
} 

app.get('/login', login.index); 
app.get('/auth/facebook', facebook.fb_auth); 
app.get('/auth/facebook/callback', facebook.fb_callback); 

आप देख सकते हैं मैं अपने 'फेसबुक' मॉड्यूल जो वास्तविक मार्गों और फेसबुक कॉलबैक को सत्यापित होता है की आवश्यकता होती है कर रहा हूँ। यह इस तरह दिखता है:

var passport = require('passport') 
, FacebookStrategy = require('passport-facebook').Strategy 
, User = require('../services/user'); 

passport.use(new FacebookStrategy({ 
    clientID: 'myclientid', 
    clientSecret: 'mysecretkey', 
    callbackURL: "http://localhost:3000/auth/facebook/callback" //localhost:3000 domain is registered domain in fb 
}, 
function(accessToken, refreshToken, profile, done) { 
    console.log('verify') 
    User.findOrCreate(profile, function(err, user){ 
     if(err) return done(err); 
     done(null, user); 
    }); 
} 
)); 

// Redirect the user to Facebook for authentication. When complete, 
// Facebook will redirect the user back to the application at 
//  /auth/facebook/callback 
exports.fb_auth = function(req, res){ 
    passport.authenticate('facebook') 
}; 
// Facebook will redirect the user to this URL after approval. Finish the 
// authentication process by attempting to obtain an access token. If 
// access was granted, the user will be logged in. Otherwise, 
// authentication has failed. 
exports.fb_callback = function(req, res){ 
    console.log('callback') 
    passport.authenticate('facebook', { successRedirect: '/', 
    failureRedirect: '/login' }); 
}; 

मैं (stdout में प्रवेश करने) कि fb_auth कहा जाता है लेकिन सत्यापित कॉलबैक फ़ंक्शन ऊपर परिभाषित नहीं है देख सकते हैं। क्या मैं कुछ देख रहा हूँ? क्या कहीं ऐसा कोई त्रुटि हो रही है जहां मैं कब्जा कर सकता हूं?

धन्यवाद!

उत्तर

8

मैं यहाँ जवाब मिला: Using PassportJS with Connect for NodeJS to authenticate Facebook Users

आप स्पष्ट रूप से 'प्रमाणित' फ़ंक्शन को कॉल करें और अनुरोध, रेस, और अगले के साथ प्रदान करने के लिए की जरूरत है।

exports.fb_auth = function(req, res, next){ 
    passport.authenticate('facebook')(req, res, next); 
    return; 
}; 

exports.fb_callback = function(req, res, next){ 
    passport.authenticate('facebook', { successRedirect: '/', 
    failureRedirect: '/login' })(req, res, next); 
}; 
+1

पासपोर्ट। प्रमाणीकरण मिडलवेयर है। आप इसे सीधे निर्यात करने के लिए इसे सरल बना सकते हैं: 'export.fb_auth = passport.authenticate ('facebook'); 'और इसी तरह कॉलबैक के लिए। –

+0

@ जेरेडहंसन गुड कॉल। धन्यवाद। – Nick

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