Col*_*len 5 javascript authentication node.js
我正在使用Node.js Passport模块来构建身份验证过程,我无法弄清楚为什么验证总是会失败,即使我每次从验证回调中都返回成功.为了使示例简单,我只使用护照本地策略而没有持久存储:
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var express = require('express');
var server = express();
passport.serializeUser(function (user, done) {
done(null, user);
});
passport.deserializeUser(function (id, done) {
done(null, id);
});
passport.use(new LocalStrategy(
function (username, password, done) {
// Would perform lookup and verification here.
// Instead return a valid user object every time.
var user = { username: username };
return done(null, user);
}
));
server.post('/login', passport.authenticate('local', { failureRedirect: '/failure' }), function (req, res) {
res.send('access granted');
});
var port = process.env.PORT || 3000;
server.listen(port, function() {
console.log('Listening on port ' + port);
});
Run Code Online (Sandbox Code Playgroud)
通过添加占位符用户序列化/反序列化方法已经解决了类似的问题,但我已经有了这些方法.
这是一个使用用户名和密码点击上面的CURL调用:
curl -X "POST" "http://127.0.0.1:3000/login" \
--data-urlencode "username=alice" \
--data-urlencode "password=supersecret"
Run Code Online (Sandbox Code Playgroud)
当我执行该POST时,响应包含HTTP 302故障重定向到/failure
每次,即使我正在返回null
(没有错误),并且LocalStrategy
回调中有一个虚拟用户对象.我在俯瞰什么?
我忽略了两件事:
passport.initialize()
中间件现在我在顶部的需求块包含两个缺少的项目,并在POST到/login
以下时返回200 OK :
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var express = require('express');
var bodyParser = require('body-parser');
var server = express();
server.use(passport.initialize());
//server.use(passport.session()); -- For persistent login sessions
server.use(bodyParser.urlencoded({ extended: true }))
Run Code Online (Sandbox Code Playgroud)