我正在编写一个本地注册策略,发现它不起作用,所以我退后一步,尝试对我的空集合进行身份验证。每次我提交表单都会花费大约 30-40 秒的时间,直到导致超时。我确保调用了 Passport.authenticate() ,但似乎它没有执行任何重定向,因此它超时了,因为我也没有渲染某些内容。
问题:
- 我预计它会重定向到 failureUrl(即“/signup”),但什么也没发生。我在这里做错了什么?
- 为什么没有来自护照的单一日志消息?这让我发疯,因为我完全不知道那里出了什么问题。
- 我是 node.js 的新手,据我所知,我不需要将配置的护照对象传递给路由器,但我可以这样做
const passport = require('passport')
那是对的吗?
这是我的 /signup 路由的函数处理程序:
function processSignup (req, res) {
logger.info("POST request received")
logger.info(req.body)
passport.authenticate('local', {
successRedirect : '/profile', // redirect to the secure profile section
failureRedirect : '/signup', // redirect back to the signup page if there is an error
failureFlash : true // allow flash messages
})
}
温斯顿打印:
7:32:04 PM - 信息:收到 POST 请求 7:32:04 PM - 信息:[电子邮件受保护] /cdn-cgi/l/email-protection, 密码=dasdsa, 提交=注册
我的 Passport.js 文件如下所示:
const LocalStrategy = require('passport-local').Strategy
const User = require('./user-model')
const passport = require('passport')
// expose this function to our app using module.exports
function config() {
passport.serializeUser(function(user, done) {
done(null, user.id)
})
// used to deserialize the user
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user)
})
})
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function(err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
}
module.exports = {
config: config
}
我的 app.js 的相关片段:
// required for passport
require('./authentication/passport').config();
app.use(cookieParser())
app.use(bodyParser())
app.use(session({
secret: 'secretToBeChanged',
saveUninitialized: false,
resave: false
}))
app.use(passport.initialize())
app.use(passport.session()) // persistent login sessions
app.use(flash()) // use connect-flash for flash messages stored in session