当前位置: 首页 > 知识库问答 >
问题:

Laravel Echo Server无法验证,获得HTTP状态403

郭星文
2023-03-14

我使用vuejs获得了laravel echo服务器laravel 5应用程序,我正在尝试通过套接字将前端连接到后端。

我已经通过Echo将所有东西连接在一起。channel()方法,但它不会订阅Echo。private()

到目前为止,我得到的是:

页面加载后,我调用:

我通过

window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001',
csrfToken : Laravel.csrfToken,
auth : {
    headers : {
        Authorization : "Bearer b6f96a6e99e90dzzzzzzz"
    }
}

});

然后我通过vue资源创建一个新事件

Vue.http.get('/api/errors/get');

这将触发laravel事件(new\App\Events\ErrorsEvent()) 事件

它通过互联网私下广播这一事件

public function broadcastOn()
{
    return new PrivateChannel('errors');
}

此时,laravel echo服务器

Channel: private-errors
Event: App\Events\ErrorsEvent
CHANNEL private-errors

那我试试用Echo订阅频道

Echo.private('errors')
           .listen('ErrorsEvent', (e) => {
           this.errors = e.errors;
        console.log(e);
       });

laravel echo服务器响应

[14:47:31] - xxxxxxxxxxxxxx could not be authenticated to private-errors

Client can not be authenticated, got HTTP status 403

有人知道我是否遗漏了什么吗?

编辑

这是我的BroadcastServiceProvider

public function boot(Request $request)
{

    Broadcast::routes();
    /*
     * Authenticate the user's personal channel...
     */
    Broadcast::channel('App.User.*', function ($user, $userId) {
        return (int) $user->id === (int) $userId;
    });
}

而且,我发现如果我尝试订阅

Echo.private('App.User.2')
       .listen('ErrorsEvent', (e) => {
       this.errors = e.errors;
    console.log(e);
   });

它连接并且一切正常,但是它仍然拒绝连接错误频道


共有1个答案

邓鸿雪
2023-03-14
匿名用户

我的问题是,我没有注意到有两个BroadcastServiceProvider::class条目在app/config.php

我只检查了第一个。一旦我取消注释应用\提供商\BroadcastService提供商::c姑娘,我就不需要指定承载令牌。

我相信你不能在上面的配置中连接错误通道的原因是,你需要将你在BroadcastServiceProvider(或路由/channels.php)中的调用更改为

Broadcast::channel('errors', function ($user) {
        return true; //replace with suitable auth check here
});

 类似资料:
  • 我正在尝试建立一个实时通知系统。我使用Laravel通知和laravel-echo-server.当我在终端laravel-echo-server start中使用start命令监听通知时,在私有信道中发生错误: ⚠ [4:36:43 PM]-H12aWYBsF5UdR5NYAAAH无法通过私人应用的身份验证。领域使用者使用者1. 客户端无法进行身份验证,已获取HTTP状态404 密码 //频道。

  • 我已经安装了Laravel回声服务器和Laravel回声客户端。 以下是laravel echo服务器。json配置。 以下脚本侦听通道事件。它可以通过很好地构建。 尝试侦听命令上的任何事件时。它不断抛出。 注: 我在laravel echo服务和谷歌上都没有发现任何有用的东西。 任何帮助将不胜感激。 拉威尔V5。4. 谢谢

  • 我正在建一个水疗中心。我使用laravel作为后端,vuejs作为前端。它们在不同的端口上独立运行。(使用laravel api) Laravel在8000上运行 Vue在8082上运行 我允许用户使用JWT Auth进行身份验证。 我正在尝试使用laravel echo服务器制作一个实时数据传输应用程序,并使用公共通道传输数据,效果非常好。 现在,我需要使用私有通道将数据广播给经过身份验证的用户

  • 我能够使用HTTPS设置在本地环境上运行laravel echo服务器。但是,我的生产服务器(基于Forge)似乎存在一个问题: 我能够通过HTTPS在本地测试私有通道,它工作得很好,所以看起来不存在配置问题。 我应该提到的是,我使用的是LaravelPassport,导致此错误的请求被抛出到常规身份验证中间件之外的页面上。 为了确保它不是我的身份验证方法,我让它在我的通道配置中返回“true”:

  • 我正在构建一个API,并试图在多个上下文中解决身份验证问题。 API需要为我们创建和部署的客户端应用程序提供服务,并使用密码处理经过身份验证的请求。在每个请求中都发送密码并不是一个好主意,因此首先点击登录endpoint并获得会话ID更有意义。问题中的webapp是用AngularJS编写的,应该在localStorage中跟踪自己的会话,以减轻会话劫持并消除对cookie的依赖以跟踪会话。 we