使用vhost时,Sails中的Passport身份验证在子域中不起作用

问题描述 投票:0回答:1

我有一个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。

node.js sails.js passport.js
1个回答
1
投票

开箱即用,Sails使用快速会话用于会话中间件,允许应用程序支持快速会话包中可用的所有相同功能。

为了便于跨多个子域(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中。可以在here找到更完整的快速会话选项列表。

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

© www.soinside.com 2019 - 2024. All rights reserved.