使用 vhost 时,Sails 中的 Passport 身份验证无法跨子域工作

Passport authentication in Sails is not working across subdomains when using vhost

我有一个 Sails 应用程序,当它是一个单域应用程序时,使用护照的身份验证工作正常(步骤如 Passport Doc 中)。我现在正在尝试将应用程序转换为使用子域(foo.example.com、bar.example.com),所有这些子域都指向同一个 sails 服务器。会话只对同一个子域有效,例如,如果用户从 foo.example.com 登录,则用户可以访问同一子域下的页面...但不能访问 bar.example.com ]. req.isAuthenticated() 在重定向到与已验证子域不同的子域时返回 false。

如何确保跨子域进行身份验证?非常感谢任何帮助。

我正在使用 Sails@1.1.0/passport@0.4.0。

开箱即用,Sails 使用 express-session 作为会话中间件,允许应用程序支持 express-session 包中可用的所有相同功能。

为了便于跨多个子域(foo.example.com、bar.example.com)共享同一会话,需要在 Sails 应用的 config/session.js 文件中配置两个选项。

session: {
  cookie: {
    domain : '.example.com',
    sameSite : false
  }
} 
  1. cookie.domain :这指定了 Domain Set-Cookie 属性的值。默认情况下,没有设置域,大多数客户端会认为 cookie 仅适用于当前域。
  2. cookie.sameSite :指定布尔值或字符串作为 SameSite Set-Cookie 属性的值。
    • true 将 SameSite 属性设置为 Strict 严格相同的站点 执法。
    • false 将不设置 SameSite 属性。

值得注意的是,cookie.sameSite是一个尚未完全标准化的属性,将来可能会发生变化。这也意味着许多客户在理解之前可能会忽略此属性。

很可能由于这个原因,它没有包含在 Sails 文档中 here. A more complete list of available options for express-session can be found here

在这个 Whosebug 问题中可以找到另一种管理跨多个子域的会话的方法。