2017-05-02 61 views
0

我正在关注Nodejs的在线课程,并试图在我的快速应用程序中实现基本身份验证。但我对app.use收到错误(新localStrategy(User.Authenticate());我试图重新安装“护照本地”为什么这个错误一直持续抛出新的TypeError('app.use()需要中间件函数');

var express = require('express'), 
app = express(), 
mongoose = require('mongoose'), 
passport = require('passport'), 
User = require('./models/user'), 
bodyParser = require('body-parser'), 
localStrategy = require('passport-local'); ; 
passportLocalMongoose = require('passport-local-mongoose'); 
mongoose.connect('mongodb://localhost/auth_DB'); 

app.use(bodyParser.urlencoded({extended: true})); 
app.use(express.static('images')); 

app.use(require('express-session')({ 
    secret: 'pppppqpqsda dasdqw ksndfkjnzmmuawt8ikweabmdsfj a', 
    resave: false, 
    saveUninitialized: false 
})); 

app.use(passport.initialize()); 
app.use(passport.session()); 
app.use(new localStrategy(User.authenticate())); 

passport.serializeUser(User.serializeUser()); 
passport.deserializeUser(User.deserializeUser()); 

app.set('view engine', 'ejs'); 

app.get('/', function (req, res) { 
    // body... 
    res.render('home'); 
}); 

app.get('/secret', function (req, res) { 
    // body... 
    res.render('secret'); 
}); 



app.get('/register', function (req, res) { 
    // body... 
    res.render('signup'); 
}); 

app.post('/register', function (req, res) { 

    User.register(new User({username: req.body.username}), req.body.password, function(err, user){ 
     if(err){ 
      console.log(err); 
      return res.render('signup'); 
     } 

    passport.authenticate('local')(req, res, function(){ 
     res.redirect('/secret'); 
    }); 

}); 

}); 


app.get('/login', function (req, res) { 
    // body... 
    res.render('signin'); 
}); 

app.post('/login', passport.authenticate('local', 
       {successRedirect: '/secret', 
       failureRedirect: '/login'}), 
    function(req, res){}); 


app.listen(3000, function(){ 
    console.log('Server Started!'); 
}); 

的package.json:? -

{ 
    "name": "test-auth", 
    "version": "1.0.0", 
    "description": "Testing the authentication", 
    "main": "app.js", 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "author": "Rishabh & Colt", 
    "license": "ISC", 
    "dependencies": { 
    "body-parser": "^1.17.1", 
    "ejs": "^2.5.6", 
    "express": "^4.15.2", 
    "express-session": "^1.15.2", 
    "mongoose": "^4.9.7", 
    "passport": "^0.3.2", 
    "passport-local": "^1.0.0", 
    "passport-local-mongoose": "^4.0.0" 
    } 
} 

user.js的: -

var mongoose = require('mongoose'); 
var passportLocalMongoose = require('passport-local-mongoose'); 
var userSchema = new mongoose.Schema({ 
    username: String, 
    password: String 
}); 

userSchema.plugin(passportLocalMongoose); 
module.exports = mongoose.model('User', userSchema); 

错误: -

C:\Users\Atom\Project\testAuth\node_modules\express\lib\application.js:210 
    throw new TypeError('app.use() requires middleware functions'); 
    ^

TypeError: app.use() requires middleware functions 
    at EventEmitter.use (C:\Users\Atom\Project\testAuth\node_modules\express\lib\application.js:210:11) 
    at Object.<anonymous> (C:\Users\Atom\Project\testAuth\app.js:37:5) 
    at Module._compile (module.js:570:32) 
    at Object.Module._extensions..js (module.js:579:10) 
    at Module.load (module.js:487:32) 
    at tryModuleLoad (module.js:446:12) 
    at Function.Module._load (module.js:438:3) 
    at Module.runMain (module.js:604:10) 
    at run (bootstrap_node.js:393:7) 
    at startup (bootstrap_node.js:150:9) 
    at bootstrap_node.js:508:3 
+0

你张贴了大量的代码,但忘了最重要的细节:错误信息。 – dfsq

+0

我们还可以看到'User = require('./ models/user')'这个问题很可能出现在这里。 – magreenberg

+0

@dfsq对不起,我将添加它,新的到stackoverflow ... – feedammo

回答

3

您的代码有一些错字。 localStrategy不是用于表达的中间件。它可以与passport一起使用。

更换

app.use(new localStrategy(User.authenticate())); 

passport.use(new localStrategy(User.authenticate())); 
+0

非常感谢。我知道这是一个愚蠢的错误。现在我一直在为此苦苦挣扎。 – feedammo

1

你似乎需要错模块 您需要本地策略,这样

LocalStrategy = require('passport-local');

但在文档,你需要添加'.Strategy'

http://passportjs.org/docs/configure

LocalStrategy = require('passport-local').Strategy; 
+0

@ yongsung.yoon的解决方案似乎正在工作。是的,我在网上看到了一些地方。谢谢^^ – feedammo

相关问题