我有一个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。
答案 0 :(得分:1)
开箱即用,Sails使用Express-Session作为会话中间件,允许应用程序支持Express-Session软件包中可用的所有相同功能。
为便于在多个子域(foo.example.com,bar.example.com)之间共享同一会话,需要在Sails应用程序的config / session.js文件中配置两个选项。
session: {
cookie: {
domain : '.example.com',
sameSite : false
}
}
值得注意的是cookie.sameSite是一个尚未完全标准化的属性,将来可能会更改。这也意味着许多客户可能会忽略此属性,直到他们理解它为止。
最有可能由于这个原因,它未包含在Sails文档here中。 here可以找到用于快速会话的可用选项的更完整列表。
此stackoverflow问题中提供了另一种跨多个子域管理会话的方法。