Laravelエコーサーバー、redis、socket.ioを使用してlaravelプライベートチャネルを認証できません

akshaypjoshi

チャットメッセージにLaravelEchoサーバー、redis、socket.ioを使用しています。

を使ってイベントを放送しています。

event(new MessageSent($messageThread));

これはbrodcastOn、次のような方法のプライベートチャネルです。

   public function broadcastOn()
    {
        return new PrivateChannel('message.' . $this->broadcastUser->id);
    }

私のroutes/channels.phpように見えます:

Broadcast::channel('message.*', function ($user, $id) {
    return (int) $user->id === (int) $id;
});

以下は私のlaravel-echo-server.jsonです:

{
    "authHost": "http://localhost:8000",
    "authEndpoint": "/broadcasting/auth",
    "clients": [
        {
            "appId": "******",
            "key": "*************"
        }
    ],
    "database": "redis",
    "databaseConfig": {
        "redis": {
            "port":"6379",
            "host":"127.0.0.1",
            "db":"0",
            "password":"****"
        }
    },
    "devMode": true,
    "host": null,
    "port": "6001",
    "protocol": "http",
    "socketio": {},
    "secureOptions": 67108864,
    "sslCertPath": "",
    "sslKeyPath": "",
    "sslCertChainPath": "",
    "sslPassphrase": "",
    "subscribers": {
        "http": true,
        "redis": true
    }

イベントをリッスンするためのjQuery:

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.location.hostname + ':6001',
    client: socketio,
    auth: {headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr("content"),
        }},
});

var userId = window.APP.user;

const channel = window.Echo.channel(`app_database_private-message.${userId}`);

channel.listen('MessageSent', (payload) => {
   console.log('payload', payload)
});

これは私のredisセクションからconfig/database.php

'redis' => [

        'client' => env('REDIS_CLIENT', 'predis'),

        'options' => [
            'cluster' => env('REDIS_CLUSTER', 'predis'),
            'prefix' => Str::slug(env('APP_NAME', 'laravel'), '_').'_database_',
        ],

        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_DB', 0),
        ],

        'cache' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_CACHE_DB', 1),
        ],

    ],

以下のエラーが表示されます。

L A R A V E L  E C H O  S E R V E R

version 1.6.0

⚠ Starting server in DEV mode...

✔  Running at localhost on port 6001
✔  Channels are ready.
✔  Listening for http events...
✔  Listening for redis events...

Server ready!

[1:21:22 PM] - Preparing authentication request to: http://localhost:8000
[1:21:22 PM] - Sending auth request to: http://localhost:8000/broadcasting/auth

⚠ [1:21:22 PM] - IQ7eT9P_RzF62lRSAAAA could not be authenticated to app_database_private-message.3
        { "message": "", "exception": "Symfony\\Component\\HttpKernel\\Exception\\AccessDeniedHttpException", "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/Broadcaster.php", "line": 81, "trace": [ { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php", "line": 58, "function": "verifyUserCanAccessChannel", "class": "Illuminate\\Broadcasting\\Broadcasters\\Broadcaster", "type": "->" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastManager.php", "line": 319, "function": "auth", "class": "Illuminate\\Broadcasting\\Broadcasters\\RedisBroadcaster", "type": "->" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php", "line": 237, "function": "__call", "class": "Illuminate\\Broadcasting\\BroadcastManager", "type": "->" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastController.php", "line": 23, "function": "__callStatic", "class": "Illuminate\\Support\\Facades\\Facade", "type": "::" }, { "function": "authenticate", "class": "Illuminate\\Broadcasting\\BroadcastController", "type": "->" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Routing/Controller.php", "line": 54, "function": "call_user_func_array" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php", "line": 45, "function": "callAction", "class": "Illuminate\\Routing\\Controller", "type": "->" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Routing/Route.php", "line": 219, "function": "dispatch", "class": "Illuminate\\Routing\\ControllerDispatcher", "type": "->" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Routing/Route.php", "line": 176, "function": "runController", "class": "Illuminate\\Routing\\Route", "type": "->" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Routing/Router.php", "line": 680, "function": "run", "class": "Illuminate\\Routing\\Route", "type": "->" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php", "line": 30, "function": "Illuminate\\Routing\\{closure}", "class": "Illuminate\\Routing\\Router", "type": "->" }, { "file": "/opt/edugem/apps/project/app/Http/Middleware/AppMiddleware.php", "line": 55, "function": "Illuminate\\Routing\\{closure}", "class": "Illuminate\\Routing\\Pipeline", "type": "->" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 163, "function": "handle", "class": "App\\Http\\Middleware\\AppMiddleware", "type": "->" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php", "line": 53, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php", "line": 41, "function": "Illuminate\\Routing\\{closure}", "class": "Illuminate\\Routing\\Pipeline", "type": "->" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 163, "function": "handle", "class": "Illuminate\\Routing\\Middleware\\SubstituteBindings", "type": "->" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php", "line": 53, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php", "line": 75, "function": "Illuminate\\Routing\\{closure}", "class": "Illuminate\\Routing\\Pipeline", "type": "->" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php", "line": 163, "function": "handle", "class": "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "type": "->" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php", "line": 53, "function": "Illuminate\\Pipeline\\{closure}", "class": "Illuminate\\Pipeline\\Pipeline", "type": "->" }, { "file": "/opt/edugem/apps/project/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php", "line": 49, "function": "Illuminate\\Routing\\{closure}"
Shizzen83

2つの問題があります:

  • エコー側では、
window.Echo.private(`message.${userId}`);

また、Laravel構成変数database.redis.options.prefixがに設定されていることを確認する必要があります''

  • Laravel側では、ソケットがこのプライベートチャネルをリッスンできるようにするために、チャネルの承認を実装する必要があります。
Broadcast::channel('message.{userId}', function ($user, $userId) {
    //Your authorization logic which should return a boolean
});

https://laravel.com/docs/7.x/broadcasting#defining-authorization-callbacks

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Laravelエコーサーバーを備えたLaravelEchoプライベートチャンネル| Redis

分類Dev

Laravelエコーサーバークライアントがイベントを受信していません

分類Dev

Javaクライアントを使用したlaravelでのプライベートチャネルの認証に関する問題

分類Dev

nodejsはsocket.ioのプライベートチャネルで受信できません

分類Dev

LaravelエコーサーバーがRedisとQueueで例外をスローする

分類Dev

socket.ioクライアントがサーバーからio.emitを受信していません(redisアダプターを使用)

分類Dev

データベースへの接続エラー:エラー:ER_NOT_SUPPORTED_AUTH_MODE:クライアントはサーバーから要求された認証プロトコルをサポートしていません

分類Dev

エラー[E0554]:#![機能]は安定版リリースチャネルでは使用できませんカーゴを使用してレーサーをインストールできませんでした

分類Dev

プッシャードライバーを使用してLaravel5.3でブロードキャスト用のチャンネル認証を設定するにはどうすればよいですか?

分類Dev

Twilioチャット:プライベートチャネルに参加しているときにエラーユーザーがチャネルのメンバーではありません

分類Dev

socket.ioを使用してチャットサーバーを作成しようとすると、理解できないエラーが発生します

分類Dev

コルーチンを使用しているときにネットワークエラーをキャッチできませんが、RxJava 2でエラーをキャッチできます。何を見逃しましたか?

分類Dev

Godaddy サーバーを使用して、laravel プッシュ通知を iOS モバイルに送信できません

分類Dev

Reactコンポーネントでラップ関数を使用してブラウザルーターでユーザーログインを認証するときに「TypeError:Object(...)は関数ではありません」を修正する方法

分類Dev

プライベートBINDDNSサーバーを使用して名前をIPに解決できません

分類Dev

X.509を使用してWebサービスへの認証時に「SSL / TLSのセキュリティで保護されたチャネルを作成できませんでした」エラー

分類Dev

ElasticIPを使用してプライベートサブネットにSSH接続できません

分類Dev

Laravelエコー管理チャネル認証エラー

分類Dev

アクティブなソケットが1つしかない場合、NodeJはsocket.ioプライベートチャネルをリッスンできません

分類Dev

ユーザーのクロスドメインをチェックするWindows認証を使用してイントラネットサイトを作成しても、資格情報を指定した後、通過できません

分類Dev

matplotlibチャートはバーのラベルを認識しませんが、同じコードがパイに対して機能します

分類Dev

ユニバーサル認証を使用してデバイス「192.168.1.17」に接続できませんでした

分類Dev

Expressサーバーを使用してsocket.ioに接続できません

分類Dev

Expressサーバーを使用してsocket.ioに接続できません

分類Dev

LaravelEchoはPusherプライベートチャンネルにサブスクライブできません

分類Dev

Laravelエコーはプライベート通知コールバックをリッスンしません。インターネット上のすべてを試しました

分類Dev

エラー:クライアントはサーバーから要求された認証プロトコルをサポートしていません。MySQLクライアントのアップグレードを検討する

分類Dev

セッションベースの認証を使用してHibernateSpringブートでマルチテナンシーサービスを実装しようとしたときのログアウトエラー「データベースが選択されていません」を修正

分類Dev

react-nativeでsocket.ioを使用してクライアントとサーバー間でメッセージを送信できません

Related 関連記事

  1. 1

    Laravelエコーサーバーを備えたLaravelEchoプライベートチャンネル| Redis

  2. 2

    Laravelエコーサーバークライアントがイベントを受信していません

  3. 3

    Javaクライアントを使用したlaravelでのプライベートチャネルの認証に関する問題

  4. 4

    nodejsはsocket.ioのプライベートチャネルで受信できません

  5. 5

    LaravelエコーサーバーがRedisとQueueで例外をスローする

  6. 6

    socket.ioクライアントがサーバーからio.emitを受信していません(redisアダプターを使用)

  7. 7

    データベースへの接続エラー:エラー:ER_NOT_SUPPORTED_AUTH_MODE:クライアントはサーバーから要求された認証プロトコルをサポートしていません

  8. 8

    エラー[E0554]:#![機能]は安定版リリースチャネルでは使用できませんカーゴを使用してレーサーをインストールできませんでした

  9. 9

    プッシャードライバーを使用してLaravel5.3でブロードキャスト用のチャンネル認証を設定するにはどうすればよいですか?

  10. 10

    Twilioチャット:プライベートチャネルに参加しているときにエラーユーザーがチャネルのメンバーではありません

  11. 11

    socket.ioを使用してチャットサーバーを作成しようとすると、理解できないエラーが発生します

  12. 12

    コルーチンを使用しているときにネットワークエラーをキャッチできませんが、RxJava 2でエラーをキャッチできます。何を見逃しましたか?

  13. 13

    Godaddy サーバーを使用して、laravel プッシュ通知を iOS モバイルに送信できません

  14. 14

    Reactコンポーネントでラップ関数を使用してブラウザルーターでユーザーログインを認証するときに「TypeError:Object(...)は関数ではありません」を修正する方法

  15. 15

    プライベートBINDDNSサーバーを使用して名前をIPに解決できません

  16. 16

    X.509を使用してWebサービスへの認証時に「SSL / TLSのセキュリティで保護されたチャネルを作成できませんでした」エラー

  17. 17

    ElasticIPを使用してプライベートサブネットにSSH接続できません

  18. 18

    Laravelエコー管理チャネル認証エラー

  19. 19

    アクティブなソケットが1つしかない場合、NodeJはsocket.ioプライベートチャネルをリッスンできません

  20. 20

    ユーザーのクロスドメインをチェックするWindows認証を使用してイントラネットサイトを作成しても、資格情報を指定した後、通過できません

  21. 21

    matplotlibチャートはバーのラベルを認識しませんが、同じコードがパイに対して機能します

  22. 22

    ユニバーサル認証を使用してデバイス「192.168.1.17」に接続できませんでした

  23. 23

    Expressサーバーを使用してsocket.ioに接続できません

  24. 24

    Expressサーバーを使用してsocket.ioに接続できません

  25. 25

    LaravelEchoはPusherプライベートチャンネルにサブスクライブできません

  26. 26

    Laravelエコーはプライベート通知コールバックをリッスンしません。インターネット上のすべてを試しました

  27. 27

    エラー:クライアントはサーバーから要求された認証プロトコルをサポートしていません。MySQLクライアントのアップグレードを検討する

  28. 28

    セッションベースの認証を使用してHibernateSpringブートでマルチテナンシーサービスを実装しようとしたときのログアウトエラー「データベースが選択されていません」を修正

  29. 29

    react-nativeでsocket.ioを使用してクライアントとサーバー間でメッセージを送信できません

ホットタグ

アーカイブ