2016-12-04 2 views
1

私はpassport.jsを初めて使用しています。 私は、ユーザーエクスプレス/パスポート - passport.authenticateは関数ではありません

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

を登録するには、次のブログを、次のされていますが、私は、サーバーを実行して、私は/registerページをロードするたびに、それは私がチェックしている

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)

上記のエラーを示してい変数は/routes/index.jsファイルに設定されます。

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) 

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

} 
を次のように

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; 

及びルート/ index.jsファイルは次のようにstrategies.jsファイルであるが、以下のように

セッションの初期化がある

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

どんな種類のヘルプでもppreciated。

答えて

1

あなたはルートファイルでルーターを使用するかだけapp

を渡す必要がありますどちらか1つは動作します。

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

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

このように、パスポートオブジェクトはルートファイルで使用できます。

0

は、最良の答えではないかもしれないが、あなたのケースで動作するはずです、strategies.jsファイルを変更します。

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; 
関連する問題