NodeJS Passport函数未被调用

时间:2017-01-08 11:08:01

标签: node.js passport.js

我正在尝试进行Facebook登录

var passport = require('passport');
var express = require('express');
var FacebookStrategy = require('passport-facebook').Strategy;
var bodyParser = require('body-parser');
var app = express();

passport.use(new FacebookStrategy({
        clientID: '-',
        clientSecret: '-',
        callbackURL: "http://localhost:3000"
    },
    function(accessToken, refreshToken, profile, done) {
        console.log("Token:", accessToken);
        console.log("Refresh token:", refreshToken);
        done(null);
    }
));

app.get('/auth/facebook',
    bodyParser.urlencoded({ extended: true }),
    passport.authenticate('facebook'));

app.get('/', function (req, res) {
    res.send("Helo");
});

app.listen(3000);

但是为什么我从来没有从FacebookStrategy中的函数获取控制台日志? 登录工作完美,我被重定向到callbackURL但该函数看起来甚至没有被调用

1 个答案:

答案 0 :(得分:1)

在使用initialize策略之前,您需要passport authentication

来自Passport Documantation本身:

  

Connect Express 的应用程序中, passport.initialize()   中间件需要初始化Passport 。如果你的申请   使用持久登录会话 passport.session()中间件必须   也可以使用。

     

请注意,启用会话支持完全是可选的,尽管它是   推荐用于大多数应用。如果启用,请务必使用   express.session()在passport.session()之前确保登录   会话以正确的顺序恢复。

passport.use(new FacebookStrategy({...})

之前添加这些行
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.session({ secret: 'your_express_session_secret' }));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);

通过Passport configure Documentation更好地了解它。

别忘了import必需node modules

var cookieParser = require('cookie-parser');
var expressSession = require('express-session');

希望这有帮助!