我已经阅读了文档,并拥有一个expressjs应用程序,该应用程序使用passport_ldapauth和会话来处理登录和注销端点。 使用sequelize将会话存储到数据库,将仅包含sessionID,过期,路径和域的cookie存储到浏览器。

我现在正在尝试保护其他端点。 在控制台中,我可以看到首先按下了反序列化程序,然后将正确的查询发送到数据库的会话表,并通过适当的会话ID查找我的用户并找到了它。

但是然后-调用了password_ldapauth,并且由于没有密码,所以我收到了“缺少凭证”的快速消息,并返回了400。

我认为这是kav在这里的第二条评论( https://github.com/vesse/passport-ldapauth/issues/53 )所指的,但没有得到答案。

也许我使这个复杂化了? 一旦用户登录其他路由,是否应该仅切换到“会话”策略(如果存在)而不是“ ldapauth”? 还是应该起作用,不是吗? 还是我做错了什么?

这是有问题的路线:

 api.post('/role/add', passport.authenticate( 'ldapauth', {session: true, failureFlash: true} ), (req, res, next) => { Roles.create(req.body).then( role => res.json(role) ).catch(err => { if (err) { console.log(err); next(err); } }); }); 

为了协助我,可能还需要我提供什么?

也许我的序列化器或反序列化器不好? 它们似乎适用于登录/注销端点。 见下文:

 passport.serializeUser(function(user, done) { let sessionUser = { username: user.sAMAccountName, sessionID: user.sessionID }; done(null, sessionUser); }); passport.deserializeUser(function(user, done) { Session.findOne({where: {sid: user.sessionID}}).then(user => { return done(null, user); }); }); 

请注意,从Active Directory返回的用户对象是ENORMOUS,这就是为什么我将整个内容重写为用户名和sessionID的最小值的原因。 我不确定,但是我认为findOne返回的用户可能是数据库的“数据”列中包含的“护照”对象,也可能不是。 我需要确保它吗? 用户可能是数据库中的整个行。

#1楼 票数:0 已采纳

嗯,这非常简单,但是在官方文档中我找不到任何地方。 因此,对于那些难以获得护照的人,这就是我的发现。

req.isAuthenticated()

只需在路由上方或在单独的文件中编写您自己的中间件功能,如下所示:

 const unAuthMsg = 'You are not authorized for this endpoint.'; export const ensureAuthenticated = (req, res, next) => { if (req.isAuthenticated()) { next(); } else { res.status(401).json({"message": unAuthMsg}); } }; 

然后在这样的路线中使用它:

 api.post('/role/add', ensureAuthenticated, (req, res, next) => { Roles.create(req.body).then(role => { return res.json(role) }).catch(err => { if (err) { console.log(err); next(err); } }); }); 

就是这样。

  ask by Son of Arathorn translate from so

未解决问题?本站智能推荐:

1回复

NodeJS express护照-ldapauth始终返回“无效的用户名/密码”

我在我的Web应用程序中使用passport-ldapauth npm进行LDAP / AD身份验证,但是尽管确定用户名和密码正确,但总是得到“无效的用户名/密码”。 这是我的代码 请帮我。
1回复

使用password.js,Express和monogodb存储会话

我无法让mongodb的会话正常工作。 我已经设置了以下代码,它可以毫无问题地创建用户。 我还可以看到正在填充sessions数据库,如下所示: http://wes.io/LNbg/content 问题是,我从未处于登录状态。 如果我仅使用内存来存储会话,则效果很好,但是
1回复

ldapauth-fork InvalidCredentialsError

我正在尝试使用 ldapauth-fork 对 LDAP 用户进行身份验证。 我在使用 LDAP 管理员帐户时遇到问题,虽然我知道它是正确的并且可以与 LDAP 浏览器一起使用,但我无法使其与 ldapauth-fork 一起使用。 这是我得到的错误 InvalidCredentialsE
1回复

无法将用户序列化为使用password.js和cookie-session的会话

我正在尝试使用Google+ OAuth进行身份验证。 为了实现这一点,我将带护照的js与Google策略结合使用(passport-google-oauth20模块),但是当护照试图将用户序列化为会话(使用cookie-session)时,我陷入了错误。 登录Google网站后出现错误
2回复

无法使用通行证 ldapauth 绑定 AD 管理员

尝试配置passport-ldapauth并测试身份验证时,出现以下错误: 我认为这是因为不允许匿名绑定,并且我已将管理员帐户凭据提供给了passport-ldapauth 的选项... 我的 env 文件看起来像这样...... 在一条路线中,我要求进行身份验证,这是发出错误的地方..
1回复

我可以使用一台服务器的相同password.js会话登录其他服务器吗

我正在将Express。服务器与passport.js一起使用,并且示例回购在端口3000上运行 。 我希望能够像示例中一样使用端口3000使用护照登录,并使会话在运行在不同端口(8000和9000)上的其他两个节点服务器上创建。 所有3台服务器都在localhost上。 在其他我
1回复

使用快速会话和passportjs无法从存储中正确获取会话

我正在使用passport , express-session和connect-pg-simple 。 问题是会话没有从存储中正确获取 ,它正确地(我希望,但怀疑)保存。 我的设置是相同的,就像许多教程一样,我已经找到了。 server.js: authenticati
1回复

password.js中的多个会话

中间件设置 我有两个单独的用户登录。 一个是客户,另一个是商人 客户护照会话代码 它正在为一个用户工作,如何为另一个用户的商人创建另一个会话