【问题标题】:Laravel echo and pusher 403 on live environment现场环境中的 Laravel echo 和 pusher 403
【发布时间】:2021-01-30 18:21:01
【问题描述】:

所以我目前有一个在本地运行的 echo + pusher 实例。现在,当我将此代码部署到我的实时环境时,它会中断。

我总是收到 403 错误,但它是完全相同的代码。我不明白。我只是使用默认的Broadcast::routes()

在本地,我在子域 (http://sub.domain.local/) 上使用 echo 服务,它可以正常工作(在子域上完成身份验证)。

但是,我希望在一个特定域 (common.domain.local) 上进行身份验证。但如果它有效,它就有效......

现在,当我将它部署到实时环境时,我在控制台中看到 POST https://sub.domain.io/broadcasting/auth 403...

虽然代码一模一样?

我能说的唯一区别是服务器上有一个 SSL 证书(让我们加密),重置完全相同....

有谁知道吗?

编辑

这是我的 broadcasting.php 配置:

connections' => [

        'pusher' => [
            'driver' => 'pusher',
            'key' => env('PUSHER_APP_KEY'),
            'secret' => env('PUSHER_APP_SECRET'),
            'app_id' => env('PUSHER_APP_ID'),
            'options' => [
                'cluster' => env('PUSHER_APP_CLUSTER'),
                'useTLS' => true
            ],
        ],

        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
        ],

        'log' => [
            'driver' => 'log',
        ],

        'null' => [
            'driver' => 'null',
        ],

    ],

【问题讨论】:

  • @KamleshPaul 已添加!
  • 还有channels.php
  • 我没有这些?我只是使用 Laravel,带有 echo 和 Pusher,就像这里:laravel.com/docs/7.x/broadcasting#configuration
  • 阅读该文档Authorizing Channels
  • 我确实多次阅读了文档...我已经搜索了两天多来解决这个问题。套接字在我的笔记本电脑上本地完美运行,但是当我开始在测试环境中使用 ssl 证书并运行时(因此主机在服务器上),身份验证会抛出 403

标签: php laravel laravel-7 pusher


【解决方案1】:

我遇到和你一样的问题,这里是my solution

1.configs/broadcasting.php:

        'pusher' => [
            'driver' => 'pusher',
            'key' => env('PUSHER_APP_KEY'),
            'secret' => env('PUSHER_APP_SECRET'),
            'app_id' => env('PUSHER_APP_ID'),
            'options' => [
                'cluster' => env('PUSHER_APP_CLUSTER'),
                'encrypted' => true,
                'host' => '127.0.0.1',
                'port' => 6001,
                'scheme' => 'https',
                'curl_options' => [
                    CURLOPT_SSL_VERIFYHOST => 0,
                    CURLOPT_SSL_VERIFYPEER => 0,
                ]
            ],
        ],

2.configs/websockets.php

    'ssl' => [

        'local_cert' => env('SSL_CERT', null),

        'local_pk' => env('SSL_PK', null),

        'passphrase' => env('JWT_SECRET', null),

        'verify_peer' => false,
    ],

3.env

SSL_CERT=/etc/letsencrypt/live/example.com/fullchain.pem
SSL_PK=/etc/letsencrypt/live/example.com/privkey.pem

4.在客户端

        window.ECHOR = new Echo({
            broadcaster: 'pusher',
            key: process.env.MIX_PUSHER_APP_KEY,
            wsHost: window.location.hostname,
            wsPort: 6001,
            wssPort: 6001,
            disableStats: true,
            enabledTransports: ['ws', 'wss'],

            // I am using jwt, if you are not, ignore this
            auth: {
                headers: {
                    Authorization: `${store.state.auth.token.token_type} ${store.state.auth.token.access_token}`
                }
            }
        });

5.确保您的服务器上允许 6001

sudo ufw allow 6001

【讨论】:

  • 以上方法似乎都不起作用...我正在使用 pusher 顺便说一句
  • @KamleshPaul 或许你可以先试试return $user,看看channels.php是否有错误。检查您的 chrome 控制台以查看 ws 是否与 ssl 连接?
  • @Robin 我用的是laravel-websockets而不是pusher,但是你仍然可以使用pusher-js的npm包。它不会限制您的 ws 连接数量。
  • 这可能会有所帮助,这是我得到 403 的请求; i.imgur.com/SA2yrFw.png
  • @Robin 对我来说,这是一个成功的身份验证请求 i.stack.imgur.com/UDLyX.png,还有 channels.php i.stack.imgur.com/YmvlX.png,你可以看到这里有一个 wss 连接 i.stack.imgur.com/K1h4M.png
猜你喜欢
  • 2023-03-10
  • 2018-01-21
  • 2020-06-14
  • 2020-09-15
  • 2022-12-05
  • 2017-04-15
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
相关资源
最近更新 更多