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

时间:2019-02-21 07:20:56

标签: node.js sails.js passport.js

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

1 个答案:

答案 0 :(得分:1)

开箱即用,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中。 here可以找到用于快速会话的可用选项的更完整列表。

stackoverflow问题中提供了另一种跨多个子域管理会话的方法。