反应:重定向到子域时保留cookie

时间:2019-06-17 22:21:10

标签: php reactjs laravel react-router session-cookies

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

company.test.com来自test.com

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

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

我能想到的是,我应该将经过身份验证的用户id以及类似xyz.test.com/encrypted-user-id的子域传递给路由,然后我将在后端获得该用户ID并进行解密它将强制用户登录而无需再次输入密码。

我的问题是...还有其他方法吗?如果否,这是否是解决此问题的可行方法

1 个答案:

答案 0 :(得分:6)

是的,还有另一种更正确的方法来解决您的问题。

我将尝试分两个部分进行回答:第一,在根域和子域之间启用cookie,第二,如何在Laravel中做到这一点。

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

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

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

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

将cookie设置为可在Laravel中的子域上使用

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

例如,对于一次关闭,您可以编写:

$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。建议在domain中设置config/session.php变量的期望值。然后,所有(!) cookie将可用于子域。

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