【发布时间】:2020-06-21 20:19:01
【问题描述】:
以前有人问过这个问题,但无法解决以前的清单。
我正在尝试使用 passport-cas 进行身份验证,但遇到了一个我不知道如何解决的错误。
我认为问题在于底部代码:
user.save((err) => {
if (err) { return done(err); }
return done(null, user);
});
尤其是在用户第一次尝试注册时会导致错误的 done(null, user)。
问题:
如果用户单击登录按钮两次,则完美登录。这样做的原因是因为它第一次抛出 ERR_HTTP_HEADERS_SENT 错误,然后重定向回家。第二次,如前所述完美运行,因为用户已经在数据库中,不需要创建。
任何帮助都会很棒,我的代码如下:
passport.js:
passport.use(new(require('passport-cas').Strategy)({
ssoBaseURL: 'https://domain.edu/cas',
serverBaseURL: 'http://localhost:8080'
}, function(netid, done) {
User.findOne({
netid: netid
}, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
const user = new User({
netid: netid
});
user.save((err) => {
if (err) { return done(err); }
return done(null, user);
});
}
return done(null, user);
});
}));
user.js:
exports.casLogin = function(req, res, next) {
passport.authenticate('cas', function(err, user) {
if (err) {
return next(err);
}
if (!user) {
return res.redirect('/');
}
req.logIn(user, function(err) {
if (err) {
return next(err);
}
return res.redirect('/');
});
})(req, res, next);
};
app.js:
const userController = require('./controllers/user');
app.get('/cas', userController.casLogin);
【问题讨论】:
标签: node.js express mongoose passport.js