2016-06-17 16 views
0

Ich habe ein Problem mit PassportJS. Es zeigt diese Meldung und ich kann nicht verstehen, wo ich falsch mache:Unbekannte Authentifizierung Facebook-Strategie - PassportJS

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

GET/Auth/facebook 500 0,505 ms - 69

Credentials für Einfachheit und Lernzweck fest einprogrammiert werden. Passport und Passport-Facebook sind installiert.

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) 
       } 
      }) 
     } 
    )); 
}; 

Routen/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; 

LÖSUNG:

Wie vorgeschlagen, füge ich nur diese Zeile vor app.use(passport.initialize());

app.js

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

Wo 'Auth/index.js' tatsächlich geladen werden? – robertklep

+1

ahhhhhhhhhhhhhhh .... Ich habe es vergessen .... require ('./ auth') (Pass); app.use (pass.initialize()); und funktioniert! –

Antwort

0

LÖSUNG:

Wie vorgeschlagen, füge ich nur diese Zeile vor app.use(passport.initialize());

app.js

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