成功通过身份验证后,我需要将用户重定向到其自己的子域,例如
company.test.com
来自test.com
“身份验证”页面在test.com
上打开,当我收到成功身份验证的响应时,将从数据库中获取用户的子域名。因此,公司名称xyz
应该重定向到xzy.test.com
,该部分已经完成。
问题是用户的会话。我将经过身份验证的用户数据保存到redux中,当页面刷新/重定向到子域时,它将丢失用户数据。
我能想到的是,我应该将经过身份验证的用户id
以及类似xyz.test.com/encrypted-user-id
的子域传递给路由,然后我将在后端获得该用户ID并进行解密它将强制用户登录而无需再次输入密码。
我的问题是...还有其他方法吗?如果否,这是否是解决此问题的可行方法
答案 0 :(得分:6)
是的,还有另一种更正确的方法来解决您的问题。
我将尝试分两个部分进行回答:第一,在根域和子域之间启用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
)。有关更详细的说明,请参见this answer。
将cookie设置为可在Laravel中的子域上使用:
根据Laravel responses
documentation,cookie
函数接受php的[setcookie][4]
函数接受的所有参数(请查看path
和domain
参数)。
例如,对于一次关闭,您可以编写:
$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将可用于子域。
除了“重定向”之外,前端(响应)不应做任何特别的事情。