问题描述
我已经安装了 Laravel echo 和 pusher js 以及 Pusher/Pusher
#bootstrap.js
import Echo from 'laravel-echo';
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',key: process.env.MIX_PUSHER_APP_KEY,cluster: process.env.MIX_PUSHER_APP_CLUSTER,encrypted: true,});
#.env
broADCAST_DRIVER=pusher
PUSHER_APP_ID=my_id
PUSHER_APP_KEY=my_key
PUSHER_APP_SECRET=my_secret
PUSHER_APP_CLUSTER=eu
我的事件文件 NewMessage
class NewMessage implements Shouldbroadcast
{
use dispatchable,InteractsWithSockets,SerializesModels;
public $message;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(Message $message)
{
$this->message = $message;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\broadcasting\Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel('messages.'. $this->message->to);
}
public function broadcastWith()
{
return ["message" => $this->message];
}
}
频道.PHP
broadcast::channel('messages.{id}',function ($user,$id) {
return $user->id === (int) $id;
});
Vue 应用 JS 代码
mounted(){
Echo.private(`messages${this.user.id}`)
.listen('NewMessage',(e) => {
this.handleIncoming(e.message)
});
},methods:{
saveNewMessage(msg){
this.messages.push(msg);
},handleIncoming(message){
if(this.selectedContact && message.from == this.selectedContact.id ){
this.saveNewMessage(message);
return;
}
alert(message.text);
}
}
api.PHP
Route::post('/conversation/send','Api\ContactController@sendNewMessage');
接触控制器
public function sendNewMessage(Request $request)
{
$message = Message::create([
'from' => $request->sender_id,'to' => $request->receiver_id,'text' => $request->text
]);
broadcast(new NewMessage($message));
return response()->json($message);
}
我也阅读了官方文档,一切都很好,但我不明白为什么,这是一个抛出错误。有什么想法吗?
解决方法
我知道为什么每次都显示禁止或不显示身份验证
解决办法: 你需要仔细检查你的 PUSHER_APP_KEY 因为如果它设置不正确,它会因为我们的流没有与推送器连接而出错
PUSHER_APP_KEY="PUT KEY HERE"
如果您非常确定您的应用程序密钥是正确的,请转到“网络”选项卡并单击您的推送器应用程序密钥,例如 e70ewesdsdssew0 如果它显示这样的结果
{"event":"pusher:connection_established","data":"{\"socket_id\":\"131139.31305364\",\"activity_timeout\":120}"}
您的 API 密钥很好 如果不正确,它会显示这样的错误
{"event":"pusher:error","data":{"code":4001,"message":"App key 3fdsfdfsdfsd not in this cluster. Did you forget to specify the cluster?"}}
另外,别忘了放集群密钥
PUSHER_APP_CLUSTER=eu