使用 Laravel Echo 加入频道时,如何判断身份验证失败?

Posted

技术标签:

【中文标题】使用 Laravel Echo 加入频道时,如何判断身份验证失败?【英文标题】:When joining a channel using Laravel Echo, how do I tell when authentication fails? 【发布时间】:2020-03-04 10:42:34 【问题描述】:

当我使用Echo.channel(channelName)Echo.join(channelName)Echo.private(channelName) 加入频道时,后跟.listen(),我如何判断服务器端的身份验证是否失败?似乎上述所有函数都返回了一个 js 对象,从所有意图和目的来看,它看起来像是连接的,即使它不是。例如:

var obj = Echo.channel('some-channel-that-always-fails-authentication');

这里,.channel() 返回一个SocketIoPresenceChannel,其中obj.socket.connected 为真。同时,服务器报告说用户“无法通过 some-channel-that-always-fails-authentication 进行身份验证”,这是我所期望的,因为我故意在 routes/channels.php 的频道定义中返回 false。

【问题讨论】:

【参考方案1】:

您可以在连接器上绑定connect_error 事件以捕获任何连接错误。

例如:

Echo.connector.socket.on('connect_error', function (error) 
    // Handle the error
);

然后当你加入频道时:

Echo.private('some-channel-that-always-fails-authentication');

它会触发句柄回调。

对于more information about events

【讨论】:

嗯,我想您可能指的是Echo.channel('some-channel-that-always-fails-authentication').socket.on('connect_error', function(error) ... );(注意.socket 部分)或Echo.channel('some-channel-that-always-fails-authentication').listen('connect_error', function(error) ... );,因为Echo 使用.listen() 而socket.io 使用.on()。无论哪种方式,当它无法通过身份验证时,它似乎仍然没有调用该函数...... @fronzee 看看我的更新。刚刚在我的本地机器上测试了它,它应该可以工作。而是在连接器上绑定事件。 事件已正确绑定,但似乎身份验证错误并未触发connect_error

以上是关于使用 Laravel Echo 加入频道时,如何判断身份验证失败?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel echo - 无法通过私有频道进行身份验证

Laravel echo - 无法通过私有频道进行身份验证

laravel-echo-server 用户未加入,未订阅套接字服务器

Laravel Echo 私人频道不听

Laravel Echo - 允许访客连接到出席频道

无法使用 Laravel echo server、redis 和 socket.io 验证 laravel 私人频道