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.com
、xyz.test.com
)。有关更详细的说明,请参阅 SO 上的this answer。
在 Laravel 的子域中设置 cookie 可用:
根据Laravel responses
documentation,cookie
函数接受 php 的[setcookie][4]
函数接受的所有参数(查看path
和domain
参数)。
例如,对于 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的主要内容,如果未能解决你的问题,请参考以下文章