通过 websocket 授权 laravel 护照

Authorization for laravel passport through websocket

我有私人频道。而且我只有在现场进行身份验证后才能使用它。但是如果是 laravel 护照,我不知道它应该如何工作。默认情况下,我需要的所有内容都包含在 cookie 中。 我有什么:

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

Broadcast::routes(['middleware' => ['api']]);没有效果。

如何通过 laravel 护照对用户进行身份验证,因为它会连接到私人频道 websocket?

不幸的是,目前 echo 不支持借助 laravel 护照进行授权,因此有必要编写您自己的 sokket.io 服务器。

我经历过这个,我的解决方案是使用 Laravel Echo & Laravel Echo Server for SocketIo。

检索用户访问令牌,然后将其存储在 cookie 或应用程序存储中,并在实例化或重新实例化 Laravel Echo 时注入它,如下所示:

let Echo = require('laravel-echo')

window.Echo = new Echo({
        broadcaster: 'socket.io',
        host: window.location.hostname + ':6001'
        auth: {
            headers: {
                 Authorization: 'Bearer ' + AUTH_API_TOKEN,
            },
        },
    });

参考文献:

  1. https://laravel.com/docs/5.3/broadcasting#driver-prerequisites
  2. https://github.com/tlaverdure/laravel-echo-server