2016-05-26 11 views
0

Ich mache einen Facebook-Login mit Express, Mungo und Pass/Pass-Facebook-Module für Nodejs.Facebook Login mit Express

Ich möchte mit einem Controller umgehen, den ich für die Authentifizierung erstellt habe. Wenn ich den Server aktivieren, lösen diese Nachricht an Klemme:

if (!verify) { throw new TypeError('OAuth2Strategy requires a verify callback 
        ^
TypeError: OAuth2Strategy requires a verify callback 

Dies ist mein Code:

Usercontroller

var mongoose = require('mongoose'); 
var passport = require('passport'); 
var FacebookStrategy = require('passport-facebook').Strategy; 
var Account = require('../models/accounts'); 
var Project = require('../models/projects'); 
var Message = require('../models/messages'); 
var Follow = require('../models/follows'); 
var apiKeys = require('../apiKeys'); 

{more code} 

fbAuth : function(access_token, refresh_token, profile, done){ 
     console.log("*************"); 
     console.log("entra en fbAuth"); 
     console.log("*************"); 
     Account.findOne({'providerId' : profile.id}, function(err, user){ 
      if(err){ 
      return done(err); 
      } 
      if(user){ 
      return done(null, user); 
      } 
      else{ 
      var newUser = new Account({ 
       emailAccount : profile.emails[0].value, 
       provider : profile.provider, 
       providerId : profile.id, 
       username : profile.name.givenName, 
      }); 
      newUser.save(); 
      } 
     }); 
     passport.authenticate('facebook',{ 
     successRedirect : '/user', 
     failureRedirect : '/' 
     }); 
    }, 
    fbAuthSuccess : function (req, res){ 
     passport.authenticate('facebook', { 
     successRedirect : '/user', 
     failureRedirect : '/' 
     }); 
    }, 

Route

router.get('/facebook', controller.fbAuth);//passport.authenticate('facebook', { scope : 'email' })); 
router.get('/facebook/callback', passport.authenticate('facebook', { 
    successRedirect : '/user', 
    failureRedirect : '/' 
}); 

app.js

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var morgan = require('morgan'); 
var mongoose = require('mongoose'); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 
var FacebookStrategy = require('passport-facebook').Strategy; 
var session = require('express-session'); 
var socket = require('socket.io'); 
var apiKeys = require('./apiKeys'); 
var app = express(); 

{more code} 

passport.use(new LocalStrategy(Account.authenticate())); 
passport.serializeUser(Account.serializeUser()); 
passport.deserializeUser(Account.deserializeUser()); 

//social facebook 
passport.use(new FacebookStrategy({ 
    clientID: apiKeys.facebook.appID, 
    clientSecret: apiKeys.facebook.appSecret, 
    callbackURL: apiKeys.facebook.callbackUrl, 
    'profileFields': ['id', 'displayName', 'email', 'name'], 
})); 

Antwort

0

Sie einen Rückruf überprüfen hinzufügen müssen, Ihre controller.fbAuth als zweites Argument zu passport.use. Die sollte passport.authenticate('facebook') als zweites Argument haben. Sie können dem Beispiel auf passports docs folgen.

+0

erklären besser bitte, mehr grafische. –