如何从 laravel 5 中的 cookie 手动验证用户?
How to authenticate user manually from cookie in laravel 5?
我正在使用 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()
我收到以下错误:
Call to member function user() on null
每当我尝试从浏览器连接到 websockets 时,它都会使用 ws 协议和 rachets 服务器,因此 laravel 路由永远不会被调用。这就是我尝试使用 Auth::user()
时出现错误的原因吗?
我可以使用该 cookie 来验证用户是否已登录吗?还有其他解决方案吗?会涉及哪些安全风险?
我得到了我自己。
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()
}
我正在使用 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()
我收到以下错误:
Call to member function user() on null
每当我尝试从浏览器连接到 websockets 时,它都会使用 ws 协议和 rachets 服务器,因此 laravel 路由永远不会被调用。这就是我尝试使用 Auth::user()
时出现错误的原因吗?
我可以使用该 cookie 来验证用户是否已登录吗?还有其他解决方案吗?会涉及哪些安全风险?
我得到了我自己。
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()
}