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 协议》,转载必须注明作者和本文链接
:+1:
为什么不把认证逻辑写在
routes/channels.php
中呢?