Laravel /broadcasting/auth 总是被 403 错误禁止

问题描述

我尝试了很多解决方案,但没有一个适合我

我已经安装了 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...