代码之家  ›  专栏  ›  技术社区  ›  Alessandro Corradini

未知身份验证Facebook策略-PassportJS

  •  1
  • Alessandro Corradini  · 技术社区  · 8 年前

    我对PassportJS有问题。它显示了此消息,我无法理解我做错了什么:

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

    GET/auth/facebook 500 0.505毫秒-69

    证书是硬编码的,目的是简化和学习。已安装Passport和Passport Facebook。

    授权/索引.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;
    

    应用.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;
    

    解决方案:

    正如建议的那样,我只是在前面添加了这一行 app.use(passport.initialize());

    应用.js

    require('./auth')(passport);
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Alessandro Corradini    8 年前

    解决方案:

    正如建议的那样,我只是在前面添加了这一行 app.use(passport.initialize());

    应用.js

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