我见过与我类似的问题,但我找不到正确的答案。
我正在尝试使用 nodejs+express+passport (本地策略)实现一个非常简单的登录表单。问题是,我的身份验证回调似乎总是失败。我已经删除了与测试数据库的每个连接(每个教程都有一个示例 MongoDB)。
这是我的登录表格
<html>
<body>
<form action="/login" method="post">
<div>
<label>Username:</label>
<input type="text" name="username" />
<br/>
</div>
<div>
<label>Password:</label>
<input type="password" name="password" />
</div>
<div>
<input type="submit" value="Submit" />
</div>
</form>
</body>
</html>
这是我的 server.js(我用 npm start 运行它)
var express = require('express');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var app = express();
var port = process.env.PORT || 8080;
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(function(username, password, done) {
// no authentication logic here... just return done with an object with 2 fields
return (done, {username : username, password : password});
}));
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
// ROUTES
// ==============================================
// sample route with a route the way we're used to seeing it
app.post('/login',
passport.authenticate('local', {
successRedirect: '/loginSuccess',
failureRedirect: '/loginFailure'
})
);
app.get('/login', function(req, res) {
res.sendfile('views/login.html');
});
app.get('/loginFailure', function(req, res, next) {
res.send('Failed to authenticate');
});
app.get('/loginSuccess', function(req, res, next) {
res.send('Successfully authenticated');
});
// START THE SERVER
// ==============================================
app.listen(port);
console.log('Magic happens on port ' + port);
我总是收到 Failed to authenticate 消息。就像我说的那样,我已经用 mongoose 剥离了与模式/模型相关的所有代码,以从示例 MongoDB 中读取数据。passport.authenticate 回调只返回带有 2 个字段的对象的 done 函数,称为 username 和 password ,就像 passport-local 所期望的一样
你能帮助我吗?