im只需一次登录即可处理2个项目,因此,如果我已经登录www.domain1.com
,那么我也将自动以相同的身份验证数据登录www.domain2.com
。但是现在当我已经登录www.domain1.com
时,身份验证数据没有发送到www.domain2.com
。即时通讯使用会话共享身份验证数据,但仍然无法正常工作。这是我到目前为止所做的。 (项目仍在本地主机中)
www.domain1.com登录(控制器)
public function dologin(Request $r)
{
$credentials = array(
'username' => $r->username,
'password' => $r->password
);
if (\Auth::attempt($credentials)) {
return view('setcookie');
}
else {
return redirect()->to('/')->withErrors('Username or Password Incorrect !');
}
}
setcookie.blade.php
<body>
<img src="http://localhost:8000/app_task/public/setcookie?id={{ Session::getId() }}" style="display:none;" />
</body>
www.domain2.com setcookie
Route::get('setcookie', function(){
Session::setId($_GET['id']);
Session::start();
return 'Cookie created';
});
我可以在日志中(在域2上)获取会话ID,但是当我尝试获取\ Auth :: user()-> id(在domain2中)时,却获得了试图获取非对象属性的信息。错误,这意味着在domain1中登录的用户ID未共享到domain2(以及其他身份验证数据,例如用户名等)。请帮助我解释为什么我遇到这个问题,并给我一个解决方案。谢谢
答案 0 :(得分:1)
我通过使用database session driver
而不是file session driver
来解决此问题,即时通讯对两个域使用相同的会话表,因此如果我设置了相同的身份验证,则user_id
session id
中domain1
中的domain2
。对于创建会话表,我使用laravel官方网站https://laravel.com/docs/5.6/session#driver-prerequisites
指南。