Laravel-echo-server+vue+Redis 遇到的私有频道认证问题

最近要做消息通知开发,因为我们的业务是前后端分离的,vue 做数据渲染,laravel 提供 API。其中有一部分功能是需要用到 websocket,既然用了 laravel 肯定想到的就是使用 laravel-echo。

省略安装部分......

其实遇到认证不通过,从源码里 Illuminate\Contracts\Broadcasting\auth($request) 追踪可以看到,当我们使用 privatepresence 频道时,laravel 就会默认使用 $request->user() 去检测用户是否登录,如果不是,那么就会产生一个 403 的错误

因为我们的业务已 API 为主,所以我就进行了以下操作

config/auth.php
'defaults' => [
        //'guard' => 'web',
        'guard' => 'api',
        'passwords' => 'users',
    ],

提供第二种方法,且不破坏原有的 web guard

App\Providers\AuthServiceProvider;

public function boot()
{
    ......
    //新增方法
    $this->registerRequestRebindHandler();
    ......

}
protected function registerRequestRebindHandler()
{
        $this->app->rebinding('request', function ($app, $request) {
                    $request->setUserResolver(function ($guard = null) use ($app) {
                            return call_user_func($app['auth']->userResolver(), $guard);
                    });
        });
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。