1

4 天以来,我一直在尝试连接到私人频道。结合了我能找到的所有可能的属性,但没有解决问题。需要对这个问题有更深入的了解。

我正在使用 Laravel Sanctum、Nuxt.js、Nuxt-auth 创建一个应用程序。我需要连接到广播专用频道。

起初我尝试使用@nuxtjs/laravel-echo包创建连接。经过长时间的尝试配置连接,我发现如果我设置authModule: true(公共频道完美连接),甚至没有创建 PisherConnector 实例。发现这个包没有得到积极的支持,而且我没有完全访问连接管理的权限,我决定放弃它。

然后我尝试使用 Laravel-echo 设置连接,然后直接通过 Pusher。没有任何效果,我收到 401 或 419 错误。

我有很多问题,没有答案。

  1. 我什么时候需要使用laravel-echo-server
  2. 我什么时候需要使用pusher/pusher-php-server
  3. 在什么情况下我需要连接broadcasting/auth,在什么情况下需要连接api/broadcasting/auth?我的前端在 上运行api/login,但我不想提供对我的 API 的外部访问。
  4. 我添加Broadcast::routes(['middleware' => ['auth: sanctum']])到我的BroadcastServiceProviderroutes/api.php也添加到(用于测试)。我也不确定这里。Broadcast::routes(['middleware' => ['auth: api']])可能需要或保留默认值Broadcast::routes()
  5. configs 的正确设置是什么:config/cors.php, config/broadcasting.php, config/sanctum.php, config/auth.php? 哪些关键参数会影响请求验证?
  6. 我应该将 CSRF-TOKEN 传递给标题吗?我尝试过不同的方式。
  7. 我什么时候需要设置encrypted:true选项?
  8. 什么middleware应该存在,Kernel什么可能会阻碍?

如果我设置authEndpointapi/broadcasting/auth419 错误(试图通过 csrf-token 没有帮助)。如果我设置authEndpointbroadcasting/auth我得到 401 错误。

我没有提供我的代码示例,因为我尝试了所有配置中的所有选项。我还尝试在 Laravel 网站 Pusher.js 上学习我的问题的文档,查看了示例。各种示例都提到了一些选项,但没有提到其他选项,反之亦然。

我很乐意接受任何建议。

4

1 回答 1

0

我和你有同样的问题。我忘了BroadCastingServiceProvider在我的/config/app.php.

现在app/Providers/BroadcastServiceProvider.php看起来像这样:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Broadcast;
use Illuminate\Support\ServiceProvider;

class BroadcastServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Broadcast::routes(['middleware' => ['api', 'auth:sanctum']]);
        require base_path('routes/channels.php');
    }
}

我没有添加Broadcast::routes到任何其他路由文件。

这就是我的 Laravel Echo 初始化的样子:

new Echo({
    broadcaster: 'pusher',
    key: 'korvrolf',
    wsHost: window.location.hostname, // I host my own web socket server atm
    wsPort: 6001, // I host my own web socket server atm
    forceTLS: false,
    auth: {
        withCredentials: true,
        headers: {
            'X-CSRF-TOKEN': window.Laravel.csrfToken
        }
    }
})

如果没有 CSRF 令牌,端点将返回419状态响应。

在我index.blade.php的 SPA 中,我打印出 CSRF 令牌:

<script>
    window.Larvel = {
        csrfToken: "{{ csrf_token() }}"
    }
</script>

现在,/broadcast/auth端点返回 200 响应。

在此处输入图像描述

于 2021-12-12T05:58:23.013 回答