React:重定向到子域时保留 cookie

Posted

技术标签:

【中文标题】React:重定向到子域时保留 cookie【英文标题】:React: Preserve cookies when redirecting to sub-domain 【发布时间】:2019-10-31 12:50:00 【问题描述】:

身份验证成功后,我需要将用户重定向到自己的子域,例如

company.test.com 来自test.com

身份验证页面在test.com 上打开,当我收到身份验证成功的响应时,我从数据库中获取用户的子域名。所以公司名称xyz应该重定向到xzy.test.com那部分已经完成了

问题是用户的会话。我将经过身份验证的用户数据保存到 redux 中,当页面刷新/重定向到子域时,它会丢失用户数据。

我能想到的只是我应该将经过身份验证的用户 id 以及像 xyz.test.com/encrypted-user-id 这样的子域传递给路由,我将在后端获取该用户 ID 并将其解密并强制用户无需再次输入密码即可登录。

我的问题是……还有其他方法吗?如果没有,这是解决这个问题的可行方法吗

【问题讨论】:

尝试跨域localStorage来实现,这里是链接jcubic.wordpress.com/2014/06/20/cross-domain-localstorage 【参考方案1】:

是的,有一种替代的、更正确的方法可以解决您的问题。

我将尝试分两部分回答:首先在根域和子域之间启用 cookie,其次如何在 Laravel 中做到这一点。

使 cookie 在根域和子域之间可用

当接收到 cookie 标头时,可以指示浏览器跨子域共享 cookie。这是通过将域添加到 Set-Cookie 标头来实现的。

Set-Cookie: user=JohnDoe; domain=testdomain.com

从RFC-6265 开始,上述语法将告诉浏览器test.com 上设置的cookie 应可用于所有子域(即a.test.comxyz.test.com)。有关更详细的说明,请参阅 SO 上的this answer。

在 Laravel 的子域中设置 cookie 可用

根据Laravel responses documentation,cookie 函数接受 php[setcookie][4] 函数接受的所有参数(查看pathdomain 参数)。

例如,对于 one off,您可以这样写:

$path = '/'; // make cookie available on all paths
$domain = "test.com";  // according to rfc6265 make available on root and subdomains
return $response($content)->cookie($name, $value, $minutes, $path, $domain);

另一种方式,用于跨根域和子域共享所有 cookie 来自 JacobBennet's snippet。建议在config/session.php 中设置domain 变量的所需值。然后,所有 (!) cookie 将可用于子域。

前端(React)不应该做任何特别的事情,除了“重定向”。

【讨论】:

以上是关于React:重定向到子域时保留 cookie的主要内容,如果未能解决你的问题,请参考以下文章

express - nodejs - 如果在子域中,则保留 URL 而不是重定向

域重定向到www时如何将www子域重定向到非www

找不到子域时如何使网站重定向到页面[重复]

子域正在重定向到主域文件

重定向到子域

.htaccess 如何仅将子域/文件夹重定向到子域