如何在laravel 5中从cookie手动验证用户?

时间:2015-09-30 10:00:27

标签: php laravel cookies laravel-5 session-variables

我正在使用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验证用户是否已登录吗?还有其他解决方案吗?涉及的安全风险是什么?

1 个答案:

答案 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()
        }