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 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2
ThinkQ

:+1:

5年前 评论

为什么不把认证逻辑写在 routes/channels.php 中呢?

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!