2016-12-04 1 views
1

passport.js를 처음 사용합니다. 나는 사용자를 등록하려면 다음 블로그를 다음 한 Express/passport - passport.authenticate가 함수가 아닙니다.

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

하지만 내가 서버를 실행할 때마다이 나는 위의 오류

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)

내가을 점검를 보여줍니다 /register 페이지를로드 변수는 /routes/index.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(); 

세션 초기화는

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) 

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 파일이

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

} 
을 다음과 같다을 다음과 같이 strategies.js 파일입니다

어떤 종류의 도움이라도 ppreciated.

답변

1

당신은 루트 파일에있는 라우터를 사용하거나 만 app

을 통과해야 하나를 하나가 작동합니다.

//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; 
관련 문제