5

因此,关于这个 sameSite 业务存在很多问题,但是在涉及Laravel Websockets时我找不到任何答案。他们的文档中没有关于此的内容。

所以我想我会在这里问一下,看看你们有没有什么想法。

考虑以下配置:

import Echo from 'laravel-echo'

window.Pusher = require('pusher-js');

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: process.env.MIX_PUSHER_APP_KEY,
    wsHost: window.location.hostname,
    wsPort: 6001,
    wssPort: 6001,
    disabledStats: true,
    encrypted: false,
    enabledTransports: ['ws', 'wss'],
    namespace: 'App',
    auth: {
      headers: {
        'X-CSRF-TOKEN': token.content
      }
    }
});

根据他们的文档,他们使用 pusher 库 - 但没有迹象表明它实际上会访问 pusher 网站。而且我不需要任何推送凭据,因为这些都是伪造的。

问题很简单:

与http://support.pusher.com/上的跨站点资源关联的 cookie设置为没有该SameSite属性。SameSite=None未来版本的 Chrome 将仅在使用和设置时提供带有跨站点请求的 cookie Secure。您可以在 Application>Storage>Cookies 下的开发人员工具中查看 cookie,并在https://www.chromestatus.com/feature/5088147346030592https://www.chromestatus.com/feature/5633521622188032查看更多详细信息。

这是整个堆栈溢出。

disableSats虽然是的,但 websockets 仍然可以正常运行,但最终 chrome 会像“不”一样。所以我不知道这是推送者发行者,laravel websockets 问题还是什么。

有人对我可以做什么或尝试做什么有任何想法吗?我已经尝试forceTLS: true在上面的配置中进行设置,这似乎有效 - 但是网络套接字将无法连接。

我担心有一天我的应用程序会停止工作,因为我们依赖 websockets 来提供很多功能,这是目前最简单、最好的库之一,不需要数天的研究和设置。

4

1 回答 1

3

首先,我们必须了解此操作的工作流程。

这是示例;

Your laravel backend
            ▼
[pub/sub service (can be redis pusher etc..)]
            ▼
laravel echo server
            ▼
websocket client ( mostly laravel echo client)

在客户端

Websocket (mostly laravel echo client)
            ▼
Laravel echo server 
            ▼
http request to laravel backend

如果您试图从客户端查找到推送网站的跟踪,那么您的客户端不可能与 laravel echo 服务器做出反应。

如果你想追踪 laravel echo server 到 pusher,那么你必须调试 laravel echo server。

在你的情况下,如果你想调试它,很可能推送器工作正常(我使用他们的服务有一段时间从未见过问题)。您可以使用 redis 服务器并将 laravel echo 连接到 redis(并且它在您的本地网络上工作,比 pusher 快得多)

我希望它有所帮助。

于 2020-01-19T23:41:29.173 回答