2016-12-04 8 views
1

Ich bin neu bei pass.js. Ich habe den folgenden Blog folgende UserExpress/Pass - pass.authenticate ist keine Funktion

https://scotch.io/tutorials/easy-node-authentication-setup-and-local

zu registrieren, aber jedes Mal, wenn ich den Server laufen und die ich die /register Seite lädt sie zeigt den obigen Fehler

TypeError: passport.authenticate is not a function at module.exports (/home/punit/Documents/****/routes/index.js:10:34) at Layer.handle [as handle_request] (/home/punit/Documents/****/node_modules/express/lib/router/layer.js:95:5) at trim_prefix (/home/punit/Documents/****/node_modules/express/lib/router/index.js:312:13) at /home/punit/Documents/****/node_modules/express/lib/router/index.js:280:7 at Function.process_params (/home/punit/Documents/****/node_modules/express/lib/router/index.js:330:12) at next (/home/punit/Documents/****/node_modules/express/lib/router/index.js:271:10) at /home/punit/Documents/****/node_modules/connect-flash/lib/flash.js:21:5 at Layer.handle [as handle_request] (/home/punit/Documents/****/node_modules/express/lib/router/layer.js:95:5)

i überprüfen die Variablen sind in der Datei/routes/index.js enthalten.

var mongoose = require('mongoose'); 
var passport = require('passport'); 
var flash = require('connect-flash'); 
var session = require('express-session'); 

var routes = require('./routes/index'); 
var users = require('./routes/users'); 

mongoose.connect("localhost:27017/****"); 

require('./models/strategies')(passport) 

var app = express(); 

Sitzung Initialisierung ist wie folgt

app.use(session({ 
    secret: '*******', 
    resave: true, 
    saveUninitialized: false 
})); // session secret 
app.use(passport.initialize()); 
app.use(passport.session()); // persistent login sessions 
app.use(flash()); // use connect-flash for flash messages stored in session 


app.use('/', routes); 
app.use('/users', users); 
app.use('/register', routes); 

require('./routes/index')(app, passport) 

die strategies.js Datei ist wie folgt

var LocalStrategy = require('passport-local').Strategy 
var Profile = require('./profile.js') 

var ex = function (passport) { 

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

    passport.deserializeUser(function (id, done) { 
    Profile.findById(_id, function (err, user) { 
     done(err, user) 
    }); 
    }); 

    passport.use('register', new LocalStrategy({ 
    usernameField: 'email', 
    passwordField: 'password', 
    passReqToCallback: true 
    }, 
    function(req, mobile, password, done) { 
    process.nextTick(function() { 
     return done(null, false); 

    }); 
    })) 
} 

console.log(ex) 

module.exports = ex; 

und die Routen/index.js Datei wird wie folgt

module.exports = function (app, passport) { 
    /* GET home page. */ 
    app.get('/login', function(req, res, next) { 
    res.render('index', { title: 'Express' }); 
    }); 
    app.get('/register', function(req, res, next) { 
    res.render('register', { title: 'Express' }); 
    }); 

    app.post('/register', passport.authenticate('register', { 
    successRedirect: '/profile', 
    faliureRedirect: '/register', 
    faliureFlash: true // allows flash message 
    }), function(req, res, err) { 
    console.log(req) 
    }) 

} 

Jede Art von Hilfe wäre ein abgeschrieben.

Antwort

1

Sie sollten entweder den Router in den Routen-Dateien verwenden oder die app

nur passieren einer wird arbeiten.

//app.use('/', routes); 
//app.use('/users', users); 
//app.use('/register', routes); 

require('./routes/index')(app, passport) 

Auf diese Weise wird das Pass-Objekt in der Routes-Datei verfügbar sein.

0

vielleicht nicht die beste Antwort sein, sollte aber in Ihrem Fall arbeiten, die strategies.js Datei ändern:

var LocalStrategy = require('passport-local').Strategy 
var Profile = require('./profile.js') 

var ex = function (passport) { 
return (
    passport.serializeUser(function (user, done) { 
    done(null, user.id) 
    }); 

    passport.deserializeUser(function (id, done) { 
    Profile.findById(_id, function (err, user) { 
     done(err, user) 
    }); 
    }); 

    passport.use('register', new LocalStrategy({ 
    usernameField: 'email', 
    passwordField: 'password', 
    passReqToCallback: true 
    }, 
    function(req, mobile, password, done) { 
    process.nextTick(function() { 
     return done(null, false); 

    }); 
    })) 
) 
} 

console.log(ex) 

module.exports = ex;