【发布时间】:2019-12-22 14:01:38
【问题描述】:
我现在已经花了几天的时间来解决这个问题。我正在使用这个 Laravel 包 Ohmybrew/Laravel-Shopify,它不使用标准的 Laravel 身份验证,因为它们有自己的中间件 auth.shop
我面临的问题是因为它不使用 $user 变量,因为默认 Auth 不存在,私有频道上 WebSockets 的广播身份验证始终是 403 未授权。
我尝试使用其他模型返回 true,但不起作用。
Broadcast::channel('shop.{id}', function ($user, $id) {
$shop = ShopifyApp::shop();
return (int) $shop->id === (int) $id;
});
我也尝试过只返回 true,不管是为了看到什么。也没有运气。
Broadcast::channel('shop.{id}', function ($user, $id) {
return true
});
我什至弄乱了 PusherBroadcast.php 和 BroadcastManager 以删除抛出未验证的异常。这也不起作用。
我仍然在掌握 Laravel 作为一个整体的工作方式,所以不知道下一步该往哪里看。我已经阅读了自定义身份验证保护,但不确定它是否会起作用,因为包有自己的身份验证。
任何指导都将不胜感激,因为我有点无法尝试。似乎我为进入私人频道所做的任何事情都不起作用。
注意:值得一提的是,用于监听 WebSockets 的测试公共频道在当前设置下工作正常。只有私有通道身份验证不起作用。
更新:这是我收听频道的方式
window.Echo.private('shop.{{ ShopifyApp::shop()->id }}')
.listen('ScheduleProcessed', function(e) {
console.log(e);
});
window.Echo.channel(`test`) // Broadcast channel name
.listen('BroadcastTestEvent', (e) => { // Message name
console.log(e); // The operation performed by the message, the parameter e is the data carried
alert("GOT S**T");
}
);
测试通道的第二个工作正常。 “商店”频道没有,部分原因是当客户端尝试连接到私人频道时,广播/身份验证总是返回 403。
更新 2
似乎与默认身份验证需要使用 $request->user() 的事实有关,因为自定义身份验证根本不使用它,所以 $request->user() 是空的。
我已经读到绑定用户可能会起作用,但不是 100% 确定如何。
$request->merge(['user' => $user]);
//add this
$request->setUserResolver(function () use ($user) {
return $user;
});
【问题讨论】:
-
您能分享一下您尝试加入私人频道的 JavaScript 代码吗?
-
嗨,@GeorgeHanson 添加了我用来监听套接字的 Laravel Echo 代码。问题是在网络选项卡中,
broadcasting/auth永远不会连接,因为它返回 403
标签: php laravel shopify phpwebsocket