这里有Passport.js的新手试图做一件简单的事情。我只想向我的前端发送自定义消息,即时消息使用“ passport”:“ ^ 0.4.0”,“ express”:“ ^ 4.17.0”和“ passport-local”:“ ^ 1.0”。 0“,但我似乎无法正常工作。我发现Express 4与此不同,它尝试下载connect-flash,但没有设法使其正常工作。
这通常会发送一条错误消息:
res.status(401).send({
message: 'Authentication key expired'
});
现在我正尝试通过护照策略来实现这一目标,但似乎没有向客户端发送任何东西,但它发送了没有自定义消息的通用401:
passport.use(
new LocalStrategy({usernameField: "login", passwordField: "password"}, (login, password, done) => {
User.findByLogin(login).then(async user => {
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
let subscription = await user.getValidSubscription();
if (!subscription) {
return done(null, false, {
message: 'Your subscription has expired.'
});
}
user.dataValues.expiration = subscription.expiration;
return done(null, user);
});
})
);
再次,我知道这是Flash消息和其他内容的问题,但是难道没有一种简单的方法可以发送自定义消息吗?我所需要的只是“错误的用户名”到达了我的前端。 我花了几天的时间,仍然没有。 预先谢谢你!
Edit1:更清晰。
答案 0 :(得分:0)
尝试使用npm install connect-flash
然后转到您的app.js文件并编写以下内容:
var flash = require('connect-flash');
app.use(flash())
您的护照功能内 加上这个 passReqToCallback
{
usernameField : 'login',
passwordField : 'password',
passReqToCallback : true }// allows us to pass back the entire request to the callback
然后在参数(登录,密码,完成)中,您可以像这样(req,login, password, done)
最后,您可以发送这样的消息
if (!user.validPassword(password)) {
return done(null, false, req.flash('signupMessage', 'Incorrect username.'));
}