laravel5.7 + pusher.comで、プライベート・チャネルを実装してみた。

laravel5.7 + pusher.comで、プライベート・チャネルを実装してみた。

laravel5.7で、リアルタイムチャットや通知に必要なpusher.comを使ってみた

1, 何が違うのかというと、
app/Events/MessageCreated.phpのチャネル指定のメソッドを
Channel(パブリック)から
PrivateChannel(プライベート)へ変更しただけ。
発信側の変更は、これだけ!

pusher.comのDebug Consoleで見てみると、channel名にprivate-というプレフィックスが付与されている。
Channel: private-my-channel, Event: my-event

2, プライベートチャネルには、認証処理が必須!
routes/channels.phpに、各チャネル毎に認証処理を記述する

3, 受信側の変更も、チャネル名にprivate-というプレフィックスが付与する。(laravelのプライベートチャネルはログイン状態じゃないと使用できないので、ユーザ認証機能を作らないと使えない)
※private channelは、プレフィックスとしてprivate-が必須!
resources/views/index.blade.php

4, csrfトークン導入で外部からアクセス出来なくはなった。ただ個別のユーザだけに通知したい時に困る(ユーザ識別が出来てないので、全員が受信できる)
laravel5.7だと、最初からuser_id識別用のサンプル・チャネルがあるので、それを使ってみる。
routes/channels.php

5, 送信する時のチャンネル文字列にユーザIDを付与する

6, 受信する側も、チャネル名を自分のユーザIDで修飾(この実装だと、自分から自分へ送っている)
これだと、他のユーザがログインしていても、送信されない(チャネルが違うので)
resources/views/index.blade.php

7, これでプライベートチャネルは完成。
実際にチャットにするなら、チャット・ルームIDを乱数にしてPrivateChannel名にすればOKかな~。
ユーザIDそのままだと、簡単に推測できてるので、盗聴できてしまう!
もしくは、UserテーブルにIDとは別に乱数KEYを持たせて、それで識別するとか。

正直言って、すごく分かりづらいです…。
https://readouble.com/laravel/5.7/ja/broadcasting.html