使用 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 加入频道时,如何判断身份验证失败?的主要内容,如果未能解决你的问题,请参考以下文章