2017-04-10 62 views
0

我正在學習express框架,其中包含passport, passport-session。現在,我收到此錯誤TypeError:LocalStrategy需要驗證回調

TypeError: LocalStrategy requires a verify callback(查看下圖):

enter image description here

而且告訴你,這個錯誤是屬於passport-session模塊,但我知道,我不能改變任何文件node_modules文件夾,但我想這就是它想要的!所以,我卡住了!

您可以檢查我的app.js文件,以及:

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var expressValidator = require('express-validator'); 
var session = require('passport-session'); 
var passport = require('passport'); 
var localStrategy = require('passport-local').Strategy; 
var multer = require('multer'); 
var upload = multer({dest: './uploads'}); 
var flash = require('connect-flash'); 
var mongo = require('mongodb'); 
var mongoose = require('mongoose') 
var db = mongoose.connection; 

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

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'pug'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 


//Handle Sessions 
app.use(session({ 
    secret: 'keyboardcat', 
    resave: true, 
    saveUninitialized: true 
})); 

app.use(passport.initialize()); 
app.use(passport.session()); 

//Validator 
app.use(expressValidator({ 
    errorFormatter: function(param, msg, value) { 
     var namespace = param.split('.') 
     , root = namespace.shift() 
     , formParam = root; 

    while(namespace.length) { 
     formParam += '[' + namespace.shift() + ']'; 
    } 
    return { 
     param : formParam, 
     msg : msg, 
     value : value 
    }; 
    } 
})); 

app.use(flash()); 
app.use(function (req, res, next) { 
    res.locals.messages = require('express-messages')(req, res); 
    next(); 
}); 


app.use('/', index); 
app.use('/users', users); 

// 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 handler 
app.use(function(err, req, res, next) { 
    // set locals, only providing error in development 
    res.locals.message = err.message; 
    res.locals.error = req.app.get('env') === 'development' ? err : {}; 

    // render the error page 
    res.status(err.status || 500); 
    res.render('error'); 
}); 

module.exports = app; 

誰能幫我找到原因和解決方案?謝謝!

注意:我搜索谷歌以及,看到很多類似的問題,但沒有得到任何解決方案,或者他們似乎並沒有涉及到這個問題!

注2:我遵循的教程,我做了與他們完全相同的步驟,但我得到錯誤,而不是他們!

回答

1

您必須爲您的本地策略定義驗證功能。例如:

passport.use(new LocalStrategy(
    function(username, password, done) { 
    User.findOne({ username: username }, function (err, user) { 
     if (err) { return done(err); } 
     if (!user) { return done(null, false); } 
     if (!user.verifyPassword(password)) { return done(null, false); } 
     return done(null, user); 
    }); 
    } 
)); 

瞭解更多關於passport-local github page該認證策略。

+1

這不行!此外,問題是由於'passport-session'和** not **來自'passport-local'。 –

+0

具體來說,問題出現在第37行,'app.use(session({...' –

+0

我不好,我得到了解決方案,它是一個錯字錯誤,而不是'var session = require('passport-session')) ;',它應該是'var session = require('express-session');',我安裝了不正確的模塊,但現在一切工作正常!.. :) –