php - Pusher:在 private-user.6 上没有回调 pusher:subscription_error
问题描述
我在使用带有 Laravel 的 Pusher 时遇到了一些问题。我已将我的 channels.php 文件配置为在此频道上广播(仅适用于经过身份验证的用户)-
Broadcast::channel('user.{user}', function ($user, $id) {
return (int) $user->id === (int) $id;
});
我的 .env 文件说 -
BROADCAST_DRIVER=pusher
PUSHER_APP_ID="652357"
PUSHER_APP_KEY="13e1**********55"
PUSHER_APP_SECRET="1e******667f8*****9f"
PUSHER_APP_CLUSTER=eu
我在我的 broadcasting.php 中有这个
'default' => env('BROADCAST_DRIVER', 'log'),
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER', 'eu'),
'encrypted' => true,
],
],
该事件在我的 UsersController.php 中触发
<?php
namespace App\Http\Controllers;
use App\Events\UserStatusEvent;
use App\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware(['auth', 'profile'])->except('show', 'help');
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param string $user
* @return \Illuminate\Http\Response
*/
public function update(Request $request, User $user)
{
$data = $request->only(['first_name', 'last_name', 'middle_name', 'email', 'city', 'dob', 'gender', 'address']);
$user->update($data);
event(new UserStatusEvent(auth()->user()));
// if ($request->ajax()) {
// return response()->json([
// 'status' => 'Profile Update successful.',
// 'errors' => app('Illuminate\Http\Response')->status(),
// ], app('Illuminate\Http\Response')->status());
// }
return back();
}
}
我安装 npm 并下载 laravel-echo (遵循Laravel 5.7 Broadcasting Docs)并在我的 bootstrap.js 文件中运行之前$ npm run dev
我有以下 -
import Echo from 'laravel-echo';
window.Pusher = require('pusher-js');
window.Pusher.logToConsole = true;
window.Echo = new Echo({
authEndpoint: 'http://localhost/penfs/public/broadcasting/auth',
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
encrypted: true
});
window.Echo.private(`user.${user}`)
.listen('UserStatusEvent', (e) => {
console.log(e.user.first_name);
console.log(e.user.email);
});
我得到的第一个错误是Pusher : No callbacks on private-user.[object HTMLDivElement] for pusher:subscription_error
在控制台上,这里我假设一个经过身份验证的用户的实例没有被传递,所以我在我的 app.blade.php 文件中通过插入这个来调整它 -<script type="text/javascript">var user = '{{ $user->id }}'</script>
在我的 app.js 脚本编译之前npm run dev
。现在,我可以获得 auth 用户的实例,因为我在视图中对其进行了硬编码,但随后又遇到了另一个错误 - Pusher : No callbacks on private-user.6 for pusher:subscription_error
。我一直在尝试调试这整个今天。请我真的需要有人来帮忙。谢谢你。
哦,我App\Providers\BroadcastServiceProvider::class,
在 config/app.php 中没有注释
编辑:
在用户状态事件中。
--
public $user;
public function __construct(User $user){
$this->user = $user;
}
public function broadcastOn(){
return new PrivateChannel('user.'.$this->user->id);
}
解决方案
推荐阅读
- sequelize.js - Sequelize - hasMany 缓慢地获取具有许多关系的一个
- python - 为什么要在语言中使用复制功能?
- dotnetnuke - 2sxc 暂存和实时版本未呈现
- python - 从维基百科中获取属于一个主题的文章的正确命题
- reactjs - 盖茨比:通过道具传递图像
- flutter - 如何以真实大小的图片弹出到 Gridview.builder
- selenium - Selenium:使用 selenium 登录返回 400(错误请求),但手动登录时返回 200
- python - JSONDecodeError 期望值:第 1 行第 1 列
- python - 防止忽略非 200 响应状态 - Scrapy
- node.js - 使用 multer 上传具有不同类别的同一字段的多个文件