2

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

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

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

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

4

2 回答 2

4

我经历过这个,我的解决方案是使用 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
于 2017-05-03T20:01:22.680 回答
0

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

于 2017-04-14T17:33:04.890 回答