微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NuxtJS + Laravel8 + Laravel echo 服务器套接字 io = subscription_error

如何解决NuxtJS + Laravel8 + Laravel echo 服务器套接字 io = subscription_error

我有这个奇怪的问题,我无法通过对私人频道进行身份验证来解决。我正在使用 Laravel 8、NuxtJS(SPA 应用程序)、Redis 和单独的 Docker 容器。

当我尝试在我的 SPA NuxtJs 应用程序中收听私人频道时,出现以下错误

42["subscription_error","private-robert-test-1",0]

我认为这是因为我在 nuxt.config.js 中的回声配置:

  echo: {
    broadcaster: 'socket.io',host: 'http://publisher-local.co.uk:8080',// authModule: true,// disconnectOnlogout: true,// token: this.token
  },

然后调用看起来像这样(在我浏览器的 ws 标签中):

42["subscribe",{"channel":"private-robert-test-1","auth":{"headers":{}}}]

我认为它应该在 auth 对象中有一些东西。所以我遵循了 NuxtJS Laravel Echo Server package 的文档并尝试将 authModule 设置为 true。一旦我这样做,我就会收到这个奇怪的错误

enter image description here

现在我想,如果它有效,那么 auth 模块会简单地向我之前显示订阅消息添加一个令牌(带有空 auth 键的那个)。

在 Laravel 中,我已经在 broadcast::routes(['middleware' => ['auth:api']]); 中完成了这个 broadcastServiceProvider

虽然我认为我什至没有到达那里。

这是我的 Laravel 回显服务器配置文件

{
    "apiOriginAllow": {},"authEndpoint": "/broadcasting/auth","authHost": "http://publisher-local.co.uk:8080/api/v1","clients": [],"database": "redis","databaseConfig": {
        "redis": {
            "host": "redis","port": "6379","keyPrefix": "","options": {
                "db": "0"
            }
        },"sqlite": {
            "databasePath": "/database/laravel-echo-server.sqlite"
        },"publishPresence": true
    },"devMode": false,"host": null,"port": 6001,"protocol": "http","sslCertPath": "","sslKeyPath": "","sslCertChainPath": "","sslPassphrase": "","socketio": {},"subscribers": {"http": true,"redis": true}
}

另一方面,公共频道工作得很好。

在这里错过了什么?提前致谢。

编辑:

我还尝试为 echo 创建一个插件,我可以在其中填充我自己需要的信息,它看起来像这样:

export default function ({ $echo,$auth}) {
  console.log($echo.connector.options.auth)
  let authData = {
    headers: {
      Authorization: $auth.strategy.token.get(),Accept: 'application/json',"X-Requested-With": 'XMLHttpRequest'
    },};

  $echo.connector.options.auth = authData;
  $echo.options.auth = authData;
}

所以我现在有令牌和其他标题,我可以在 WS 选项卡中看到它们,但没有任何区别。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。