pusher.com + laravel mixでPrivate Channelを実装

pusher.com + laravel mixでPrivate Channelを実装

これをPublicChannelからPrivate Channelにする

pusher.comのリアルタイム通知を、laravel mixで実装してみた。

App/Events/pusher_sent.php
1, pusher送信のPrivate化は、本当にPrivateをつけるだけ

2, 受信JSは、window.Echo.channelからwindow.Echo.privateに書き換える。
resources/js/app.js

3, この状態で、pusher受信するとapp.js:38658 POST http://localhost/broadcasting/auth 404 (Not Found)というエラーになる。
a, PrivateChannelは必ずユーザ認証が必要(プライベートだから)
b, そのためにauthEndpoint(デフォルトだとドメイン名/broadcasting/auth)にアクセスしに行って、認証済みか確認する
c, resources/js/bootstrap.jsに、正しいパスでauthEndpointを指定すればOK!(app.jsをコンパイルしなおしてF5リロードが必要)

4, この状態で、pusher受信するとapp.js:38658 POST http://localhost/chat/public/broadcasting/auth 403 (Forbidden)というエラーになる(認証に失敗している)
routes/channels.phpに、認証処理を記述する。

ここまでやって、Public Channelと同じ事を、Private Channelでも出来るようになった!
このままだと意味があまり無いので、ユーザー認証をからめた処理を行う(現状だと、channel名とevent名が分かっていれば、誰でも内容が見えてしまう)

routes/web.php

App\Events\pusher_sent

http://localhost/chat/public/sent/1 で、pusher.comへ送信出来たか確認する。
特定のユーザのみ受信できるようにするためには

1, resources/view/layout/app.blade.php(共通ヘッダフィアル)で、jsでもログインIDが使えるようにする

2, app.js(laravel mixでコンパイルされた統合ファイル)で、チャネル名にログインユーザIDを指定する。

3, routes/channels.phpで、ユーザIDが一致しているか判定する
Broadcast::channelのクロージャ第一引数は、ログインしたユーザ情報が自動的に格納されるので認証に使える!
こうする事によって、チャネル名を”private-channel.2″としても、ユーザID=2のユーザ以外は受信できなくなる。