Laravel + Pusher,无法订阅状态频道

如何解决Laravel + Pusher,无法订阅状态频道

我目前正在研究 Laravel 广播

我已经了解了公共频道、私人频道,但是当我尝试学习状态频道时,遇到了一个问题,无法订阅状态频道

一个简单的例子:我创建了一个简单的基本登录/注销功能,用于检测用户是离开在线频道还是加入他们

// AuthController
public function login(Request $request) {
    $request->validate([
        ...
    ]);

    $user = User ... where ... first;
    
    if ($user && Hash::check($request->password,$user->password)) {
        $user->update(['online' => 1]);

        $token = $user->createtoken(...,['*']);

        ... // Login attempts

        broadcast(new LoginEvent($user))->toOthers();
        
        return Response::json([
            'token' => $token->plainTextToken,'user' => $user
        ]);
    }

    // Fail
}

然后假设我将用户重定向到 /home 路由

// home.vue
<template>
    ...
</template>

<script>
    import { mapGetters } from 'vuex'

    export default {
        ...
        created() {
            Echo.join('room.1')
                .here(users => {
                    console.log(users)
                })
                .joining(user => {
                    console.log(`User: ${user.name} has enter the room`)
                })
                .leaving(user => {
                    console.log(`User: ${user.name} has leave the room`)
                })
        }
    }
</script>

这是我的 bootstrap.js

// resource/js/bootstrap.js
...
...

import Echo from 'laravel-echo'

window.Pusher = require('pusher')

window.Echo = new Echo({
    broadcaster: 'pusher',key: process.env.MIX_PUSHER_APP_KEY,cluster: process.env.MIX_PUSHER_APP_CLUSTER,forceTLS: true,authEndpoint: '/api/broadcasting/auth',auth: { // Ref: // https://laracasts.com/discuss/channels/laravel/how-to-auth-broadcasting-with-airlocksanctum-access-tokens
        headers: {
            'Authorization': `Bearer ${localStorage['token']}`
        }
    }
})


// routes/channels.PHP
...

broadcast::channel('room.{id}',function ($user,$id) {
    // I have read that if we want to allow users to join a presence channel,we must return array or null for not allowing them to join
    return [
        'id' => $user->id,'name' => $user->name
    ];
})

我使用不同的浏览器查看结果,假设 A 登录 Chrome,B 登录 Opera

然后在设置好一切之后,我尝试登录,并检查我的浏览器控制台选项卡, 但它没有显示任何内容,然后我查看 Pusher,只有 connected,但没有订阅

所以我试着把 home.vue 改成:

// home.vue
...

created() {
    var channel = Echo.join('room.1')

    console.log(channel)
}

然后我刷新页面,重新进行身份验证,控制台选项卡只给我 PusherPresenceChannel 对象

我该如何解决这个问题?公共和私人频道都很好,可以处理我的案例,但不是在线频道

抱歉英语不好

提前致谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?