【问题标题】:Authentication without Passport无护照认证
【发布时间】:2026-02-08 16:35:01
【问题描述】:

我正在使用活动目录来验证用户,所以我认为我不需要使用 Passport,我需要做的就是在密码签出后创建一个带 res 的全局(?)布尔值。 locals 表示用户已通过身份验证。

我在控制器功能中尝试过这样的事情:

ad.authenticate(username,password, function(err,auth) {

    //some of the things I tried unsuccessfully -- should be true after logged in
    res.locals.auth = auth
    app.locals.auth = auth //app not defined 

})

但是,我发现当我调用稍后的函数检查用户是否作为 diff 路由的中间件的一部分登录时,res.locals.auth 和 app.locals.auth 要么是假的,要么是未定义的。我尝试使用下面的代码在我的 server.js 文件中设置这两个变量,但这也不起作用......

 app.use((req, res, next) => {
  app.locals.auth = false;
  res.locals.auth = false;
  next();
});

所以我的问题是,我应该在哪里保存经过身份验证的状态?或者我应该只使用护照,因为有一些我不知道的安全问题?护照设置示例中的 isMemberOf 有什么意义?
https://www.npmjs.com/package/passport-activedirectory

我要做的只是检查用户凭据并基本上在 Passport 中重新创建 req.isAuthenticated,因为由于 isMemberOf,我无法弄清楚如何使用它。

【问题讨论】:

  • 您是否希望在请求之后记住登录状态? FWIW res.locals 不会创建全局任何东西,这些是在当前请求的生命周期内存在的临时变量。
  • @James 如果我理解正确,是的。因此,我正在阅读 res.locals ,因此它似乎不是解决方案,但它不断出现在示例中,我也不认为 app.locals 是解决方案,因为它是全球性的/每个人都可以看到它?此外,当我在下一个函数中引用 req.locals 和 app.locals 以检查它们是否已登录时,它也一直以未定义的形式返回,所以我不知道在哪里存储状态...
  • Cookie-session 是关键。

标签: node.js express authentication passport.js


【解决方案1】:

通常,服务器会通过 cookie 或 JWT(json Web 令牌)发回包含一些有用数据(用户或会话 ID、到期日期)的令牌。

然后客户端将令牌放入对服务器的每个请求中。服务器验证过期日期并处理请求。

浏览器会自动将Cookies放入请求中。 JWT 应该由您的客户端代码放入请求中。

【讨论】:

  • JWT 不是安全的方式,它不能防止冒充。 yiu 应该依赖与某种数据库接触的会话和 cookie。