Laravel-echo-server+vue+Redis 遇到的私有频道认证问题
最近要做消息通知开发,因为我们的业务是前后端分离的,vue 做数据渲染,laravel 提供 API。其中有一部分功能是需要用到 websocket,既然用了 laravel 肯定想到的就是使用 laravel-echo。
省略安装部分......
其实遇到认证不通过,从源码里 Illuminate\Contracts\Broadcasting\auth($request)
追踪可以看到,当我们使用 private
或 presence
频道时,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 协议》,转载必须注明作者和本文链接
推荐文章: