我正在使用websockets,我正在使用Rachet。每当用户尝试建立连接时,我都需要进行身份验证。我的后端使用laravel 5进行所有http身份验证。
我的服务器代码是这样的:
public function onOpen(ConnectionInterface $conn, RequestInterface $request = null) {
if (null === $request) {
throw new \UnexpectedValueException('$request can not be null');
}
$cookie = $request->getCookie('laravel_session');
//do authentification with cookie if possible
我尝试使用laravel
Auth::user()
我收到了以下错误:
在null
上调用成员函数user()
每当我尝试从浏览器连接到websockets时,它将使用ws protcol和rachets服务器,因此laravel路由永远不会被调用。这是我尝试使用Auth::user()
时出错的原因吗?
我可以使用该Cookie验证用户是否已登录吗?还有其他解决方案吗?涉及的安全风险是什么?
答案 0 :(得分:1)
我得到了自己。
require_once getcwd() . '/bootstrap/autoload.php';
$app = require getcwd() . '/bootstrap/app.php';
$kernel = $app->make(\Illuminate\Contracts\Http\Kernel::class);
// var_dump('kernel booted successfully');
$response = $kernel->handle(
$request = \Illuminate\Http\Request::capture()
);
// var_dump('Response object created');
// var_dump('Decrypting cookie : ');
// var_dump($cookie);
$id = $app['encrypter']->decrypt($cookie);
// var_dump('Id decrypted : '.$id);
$app['session']->driver()->setId($id);
$app['session']->driver()->start();
$user = $app['auth']->check();
//if not logged in
if( $user == false ){
return false;
}else{
//return instance of an app
return $app;
//to get user details: $app['auth']->user()
}