2016-05-26 3 views
0

Я делаю вход в Facebook с помощью модулей Express, mongoose и паспорт/паспорт-facebook для nodejs.Facebook логин с помощью Экспресс

Я хочу обработать контроллер, который я создал для аутентификации. Когда я активировать сервер, вызвать это сообщение на терминале:

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

Это мой код:

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 : '/' 
     }); 
    }, 

маршрут

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'], 
})); 

ответ

0

Вы должны добавить проверки обратного вызова, ваш controller.fbAuth в качестве второго аргумента passport.use. В качестве второго аргумента router.get('/facebook должен иметь passport.authenticate('facebook'). Вы можете следовать примеру на passports docs.

+0

объясните лучше пожалуйста, более графический. –

Смежные вопросы