【发布时间】:2015-06-03 02:53:58
【问题描述】:
我正在使用 Node.js Passport 模块来构建身份验证过程,我无法弄清楚为什么验证总是失败,即使我每次都从验证回调中返回成功。为了简单起见,我只使用了passport-local 策略,没有持久存储:
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);
});
通过添加占位符用户序列化/反序列化方法已经解决了类似的问题,但我已经准备好了。
这是一个 CURL 调用,使用用户名和密码点击上述内容:
curl -X "POST" "http://127.0.0.1:3000/login" \
--data-urlencode "username=alice" \
--data-urlencode "password=supersecret"
当我执行该 POST 时,响应每次都包含 HTTP 302 失败重定向到 /failure,即使我返回 null(没有错误),以及 LocalStrategy 回调中的虚拟用户对象。我忽略了什么?
【问题讨论】:
标签: javascript node.js authentication