未知身份验证Facebook战略 - PassportJS

时间:2016-06-17 07:56:58

标签: node.js passport.js passport-facebook

我遇到了PassportJS的问题。它显示此消息,我无法理解我在哪里做错了:

{"message":"Unknown authentication strategy \"facebook\"","error":{}}

GET / auth / facebook 500 0.505 ms - 69

凭据简单和学习目的是硬编码。已安装Passport和Passport-Facebook。

AUTH / index.js

var passport = require('passport');

var FacebookStrategy = require('passport-facebook').Strategy;

var User = require('../modules/user');

module.exports = function(){

    passport.use( new FacebookStrategy({
            clientID: "secret",
            clientSecret : "secret",
            callbackURL : "secret"
        },
        function(accessToken, refreshToken, profile, done) {
            User.findOne({ email: profile.emails[0].value }, function (err, user) {
                if (err) { return done(err) }
                if (!user) {
                    user = new User({
                        firstname: profile.name.givenName,
                        lastname: profile.name.familyName,
                        email: profile.emails[0].value,
                        providers: {
                            facebook: {
                                id: profile.id,
                                access_token: accessTOken,
                                display_name: displayName,
                                picture: "http://graph.facebook.com/"+profile.id+"/picture?type=square"
                            }
                        }
                    })
                    user.save(function (err) {
                        if (err) console.log(err)
                        return done(err, user)
                    })
                }
                else {
                    return done(err, user)
                }
            })
        }
    ));
};

路由/ auth.js

var express = require('express');
var router = express.Router();
var passport = require('passport');

router.get('/facebook', passport.authenticate('facebook'), function(res, res){});

router.get('/facebook/callback', passport.authenticate('facebook'), function(res, res){});


module.exports = router;

app.js

const express = require('express');
const path = require('path');

const logger = require('morgan');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const passport = require('passport');

const auth = require('./routes/auth');

const app = express();
mongoose.connect('mongodb://localhost:auth/auth');

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(passport.initialize());

app.use('/auth', auth);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.json({
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.json({
    message: err.message,
    error: {}
  });
});


module.exports = app;

SOLUTION:

根据建议,我只是在app.use(passport.initialize());

之前添加此行

app.js

require('./auth')(passport);

1 个答案:

答案 0 :(得分:0)

<强> SOLUTION:

根据建议,我只是在app.use(passport.initialize());

之前添加此行

<强> app.js

require('./auth')(passport);