gpt4 book ai didi

javascript - Node passport-local 策略总是失败

转载 作者:数据小太阳 更新时间:2023-10-29 06:11:06 25 4
gpt4 key购买 nike

我正在使用 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 时,响应每次都包含重定向到 /failure 的 HTTP 302 失败,即使我返回的是 null(无错误),并且LocalStrategy 回调中的虚拟用户对象。我忽略了什么?

最佳答案

我忽略了两件事:

  • 没有调用 passport.initialize() 中间件
  • 我没有解析请求主体,因为 Express 不包括开箱即用的内容

现在我在顶部的 require block 包含了这两个缺失的项目,并且在 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 }))

关于javascript - Node passport-local 策略总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30604300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com