throw new TypeError('OAuth2Strategy 需要验证回调');

pur*_*i21 4 node.js oauth-2.0 express facebook-authentication

所以我正在学习node.js和facebook身份验证,我遇到了这个错误:

/home/lindan4/Git/HelloNodeJS/ChatTime/node_modules/passport-oauth2/lib/strategy.js:79
  if (!verify) { throw new TypeError('OAuth2Strategy requires a verify callback'); }
                 ^

TypeError: OAuth2Strategy requires a verify callback
    at Strategy.OAuth2Strategy (/home/lindan4/Git/HelloNodeJS/ChatTime/node_modules/passport-oauth2/lib/strategy.js:79:24)
    at new Strategy (/home/lindan4/Git/HelloNodeJS/ChatTime/node_modules/passport-facebook/lib/strategy.js:55:18)
    at module.exports (/home/lindan4/Git/HelloNodeJS/ChatTime/app/auth/index.js:42:16)
    at Object.<anonymous> (/home/lindan4/Git/HelloNodeJS/ChatTime/server.js:3:22)
    at Module._compile (internal/modules/cjs/loader.js:707:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:718:10)
    at Module.load (internal/modules/cjs/loader.js:605:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:544:12)
    at Function.Module._load (internal/modules/cjs/loader.js:536:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:760:12)
    at startup (internal/bootstrap/node.js:308:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:878:3)
Run Code Online (Sandbox Code Playgroud)

这是代码:

'use strict';

const passport = require('passport');
const config = require('../config');
const FacebookStrategy = require('passport-facebook').Strategy;

const helper = require('../helpers');

module.exports = () => {

  passport.serializeUser((user, done) => {
    done(null, user.id);
  });


  passport.deserializeUser((id, done) => {
    helper.findById(id).then(user => {
      done(null, user);
    }).catch('Error deserializing user');
  });

  //Issue is here
  let authProcessor = (accessToken, refreshToken, profile, done) => {
      //Find a user in the local MongoDB instance using the profile.id


      helper.findRecord(profile.id).then(result => {
        if (result)
        {
          done(null, result);
        }
        else
        {
            //Create a new user and return
            helper.createNewUser(profile).then(newChatUser => {
              done(null, newChatUser)
            }).catch(error => console.log('Error when creating new user'));
        }
      });
  }

  passport.use(new FacebookStrategy(config.fb), authProcessor);
}
Run Code Online (Sandbox Code Playgroud)

错误在于这一行:

 passport.use(new FacebookStrategy(config.fb), authProcessor);
Run Code Online (Sandbox Code Playgroud)

我已经查看了谷歌和 Stack Overflow,但尚未找到解决方案。我希望有人可以帮助我。仅供参考,“config”模块的实现如下所示:

 passport.use(new FacebookStrategy(config.fb), authProcessor);
Run Code Online (Sandbox Code Playgroud)

Pre*_*ige 12

你这样称呼它:

passport.use(new FacebookStrategy({}), function(){} )
Run Code Online (Sandbox Code Playgroud)

但应该是:

passport.use(new FacebookStrategy( {}, function(){} ) ) //Note where I moved the parenthesis
Run Code Online (Sandbox Code Playgroud)

FacebookStrategy接受 2 个参数,第一个是具有 id/secret/url 的对象,第二个是函数,并且new FacebookStrategy是您传递给passportjs.use().