【问题标题】:Laravel Echo Server can not be authenticated, got HTTP status 403Laravel Echo Server 无法通过身份验证,得到 HTTP 状态 403
【发布时间】:2018-02-13 15:04:18
【问题描述】:

我使用vuejs 获得了laravel-echo-serverLaravel 5 应用程序,我正在尝试通过套接字将前端连接到后端。

我已经设法通过Echo.channel() 方法将所有内容连接在一起,但是它不会使用Echo.private() 订阅

这是我目前得到的:

页面加载后,我会调用:

我通过 Echo 初始化

window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001',
csrfToken : Laravel.csrfToken,
auth : {
    headers : {
        Authorization : "Bearer b6f96a6e99e90dzzzzzzz"
    }
}

});

然后我通过vue resourse创建一个新事件

Vue.http.get('/api/errors/get');

这会触发 laravel event(new \App\Events\ErrorsEvent()); 事件

通过以下方式私下广播事件

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

此时laravel-echo-server 回复

Channel: private-errors
Event: App\Events\ErrorsEvent
CHANNEL private-errors

然后我尝试通过运行来订阅带有 echo 的频道

Echo.private('errors')
           .listen('ErrorsEvent', (e) => {
           this.errors = e.errors;
        console.log(e);
       });

laravel-echo-server 的回应是

[14:47:31] - xxxxxxxxxxxxxx could not be authenticated to private-errors

Client can not be authenticated, got HTTP status 403

有人知道我是否在这里遗漏了什么吗?

编辑

这是我的BroadcastServiceProvider

public function boot(Request $request)
{

    Broadcast::routes();
    /*
     * Authenticate the user's personal channel...
     */
    Broadcast::channel('App.User.*', function ($user, $userId) {
        return (int) $user->id === (int) $userId;
    });
}

另外,我发现如果我尝试订阅

Echo.private('App.User.2')
       .listen('ErrorsEvent', (e) => {
       this.errors = e.errors;
    console.log(e);
   });

已连接,一切正常,但仍拒绝连接errors 频道

【问题讨论】:

  • 请显示您的广播路由以及您如何验证用户实例。
  • 我遇到了类似的问题,你解决了吗?另外,您从哪里获得身份验证承载代码?
  • 问题出在身份验证承载中。如果我没记错的话,在你启动 echo server 之前,你需要生成一个客户端 ID。这将创建 appId 和 & 密钥,您将其用作身份验证承载。

标签: laravel sockets authentication vuejs2 laravel-echo


【解决方案1】:

我的问题是我没有注意到 app/config.php 中有 两个 BroadcastServiceProvider::class 条目

我只检查了第一个。一旦我取消了App\Providers\BroadcastServiceProvider::class 的注释,我就不需要指定不记名令牌了。

我认为您无法在上述配置中连接到 errors 频道的原因是您需要将 BroadcastServiceProvider(或 routes/channels.php)中的呼叫更改为

Broadcast::channel('errors', function ($user) {
        return true; //replace with suitable auth check here
});

【讨论】:

    猜你喜欢
    • 2019-01-25
    • 2018-02-19
    • 2018-11-24
    • 2020-07-24
    • 2018-01-21
    • 2018-11-21
    • 1970-01-01
    • 2021-07-18
    • 2019-01-04
    相关资源
    最近更新 更多