首页 > 解决方案 > 获取 403,使用 laravel 广播的私人频道时出错

问题描述

无法在我的聊天应用程序中对用户进行身份验证。我从控制台收到 403 错误。虽然当我使用私人频道时会发生这种情况,但是当使用公共频道时,这真的很好,但我绝对只想要经过身份验证的用户。它更像是一个水疗中心,因此几乎所有事情都使用 axios,包括对 laravel 的用户身份验证请求。下面是我的代码:

广播服务提供者:

` public function boot()
{
    Broadcast::routes();

    require base_path('routes/channels.php');
}`

频道.php:

`Broadcast::channel('App.User.{id}', function ($user, $id) {
    return (int) $user->id === (int) $id;
});

Broadcast::channel('chat', function ($user) {
    return Auth::check();
});
`

听来自 vue 组件的指令:

`Echo.private('chat')
            .listen('.App\\Events\\Chats\\MessageSent', (e) => {
                console.log(e);
                this.sentMessages.push({
                    message: e.message.message,
                    user: e.user
                });
`

消息发送事件:

`   public function broadcastOn()
{
    return new PrivateChannel('chat');
}
`

现在使用 vue-echo 包装器,但我仍然遇到了这个问题,我还没有弄清楚我错过了什么

标签: laravelvue.jspusherlaravel-echo

解决方案


这基本上就像错误所暗示的那样,是一个身份验证问题,我在我的应用程序中使用令牌进行身份验证,但现在还需要将此令牌传递给用户以及 vue-echo。

并且还要改变:

Broadcast::routes();

Broadcast::routes(['middleware' => ['auth:api']]);

因为我正在创建一个单页应用程序,因此使用 axios 进行身份验证,因此使用 api 中间件向我解释。

在Alex 提供的关于“Laravel /broadcasting/auth Always Fails With 403 Error”问题的答案的指导下, 您可以在那里获得更多详细信息。

谢谢大家。


推荐阅读