【发布时间】:2019-03-03 22:32:03
【问题描述】:
我在使用 ActiveDirectory 策略时遇到 Passport.js 问题,我成功地进行了身份验证,但未能在后续请求中维护会话。身份验证后,对req.isAuthenticated() 的任何调用都将返回 false。此外,客户端的浏览器上没有设置 cookie。我花了一天时间浏览类似的帖子,但到目前为止,建议的解决方案都没有奏效。
需要注意的一些观察:
-身份验证始终成功,并将 req.user 返回给客户端。
-serializeUser() 中的 console.log 始终会触发并正确记录用户记录。
-deserializeUser() 中的 console.log 永远不会触发,我不确定何时应该调用此函数,但似乎没有?
-登录后,每次我调用我的 /test 端点时,都会触发未经身份验证的条件。
// Passport Requires
const passport = require('passport');
const session = require('express-session');
var ActiveDirectoryStrategy = require('passport-activedirectory');
// Setup
app.use(session({
secret: 'secret',
resave: false,
saveUninitialized: false,
cookie: { secure: false, maxAge: 600000 }
}));
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function(user, done) {
console.log('userStrategy -- serialized:', user)
done(null, user);
});
passport.deserializeUser(function(user, done) {
console.log('userStrategy -- deserializeUser', user)
done(null, user);
});
passport.use(new ActiveDirectoryStrategy({
integrated: false,
passReqToCallback: true,
ldap: {
url: "url",
baseDN: "baseDN",
username: `username`,
password: `password`
}
}, function (req, profile, ad, done) {
ad.isUserMemberOf(profile._json.dn, 'Access Group', function (err, isMember) {
console.log('isMember:', isMember)
if (err) {
return done(err)
} else {
return done(null, profile)
}
})
}))
// Login Route
app.post('/login',
passport.authenticate('ActiveDirectory', { failWithError: true }),
function (req, res) {
console.log('Authenticated');
return res.status(200).send(req.user);
}, function (err) {
console.log('Not Authenticated');
return res.sendStatus(401).send(err);
}
)
// Test endpoint to check whether user is authenticated
app.get('/test', function(req, res) {
if (req.isAuthenticated()) {
res.send('Youre authenticated!')
} else {
res.send('Youre not authenticated!')
}
})
感谢您对这个问题的任何想法——谢谢!
【问题讨论】:
标签: node.js active-directory passport.js