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 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 2
ThinkQ

:+1:

5年前 评论

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

5年前 评论

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