当前位置: 首页 > 知识库问答 >
问题:

Laravel回声客户端无法验证

周墨一
2023-03-14

我看到这个问题已经被问了很多次,但是没有一个答案是有效的,所以我请求帮助和一些见解。

我使用laravel回声和redis广播事件。我的laravel回声服务器启动得很好,redis运行得很好。

重新加载网页时,在laravel echo服务器终端中出现以下错误:

⚠ [4:49:19 PM] - qg4WSWl5YusQY8hJAAAA could not be authenticated to private-test-channel.1
{"error":"Unauthenticated."}
Client can not be authenticated, got HTTP status 401

我一直在做这件事,但没有什么能帮上忙。

这是我的应用程序。js

import Echo from "laravel-echo";

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

这里是我的echo.js

  window.Echo.private('test-channel.{{Auth::user()->id}}')
    .listen('EventName', function(event) {
      console.log('data', event);
  });

我的广播服务提供商

public function boot()
{
  //broadcast routes middleware
  Broadcast::routes(['middleware' => ['auth', 'web']]);

  /*
  * Authenticate the user's personal channel...
  */
  Broadcast::channel('App.User.*', function ($user, $userId) {
    return (int) $user->id === (int) $userId;
  });

  //require all base channels
  require base_path('routes/channels.php');
}

这是我的larave echo服务器。json

{
    "authHost": "http://127.0.0.1:8000",
    "authEndpoint": "/broadcasting/auth",
    "clients": [
        {
            "appId": "570453f474365cc8",
            "key": "4baec74e662696009e7857e49d3364c4"
        }
    ],
    "database": "redis",
    "databaseConfig": {
        "redis": {},
        "sqlite": {
            "databasePath": "/database/laravel-echo-server.sqlite"
        }
    },
    "devMode": true,
    "host": "127.0.0.1",
    "port": "6001",
    "protocol": "http",
    "socketio": {},
    "sslCertPath": "",
    "sslKeyPath": "",
    "sslCertChainPath": "",
    "sslPassphrase": ""
}

当我触发事件时,我将在控制台中获取该事件,但由于某种原因无法对用户进行身份验证,我也无法解决该问题。

共有1个答案

蔺劲
2023-03-14

你在路线/channels.php中看到许可了吗?

这是解释的链接:https://laravel.com/docs/5.5/broadcasting#authorizing-channels我看到你已经把BroadcastServiceProvider

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

但在路线/通道中。php默认命令是:

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

也许这是在制造一些冲突或问题

 类似资料:
  • 我一直在尝试使用Laravel Passport,但我收到了错误{“error”:“invalid_client”,“message”:“client authentication failed”}。我已经在这个Android和Laravel项目中使用了它,但是当我在数据库中看到正确的数据时,我可以正确地注册用户。然后,当Android应用程序尝试获取访问令牌时,它会崩溃,因为服务器返回了以前的错

  • 我正在尝试使用专用通道验证laravel echo。每次我收到“无法验证到private-U详细信息。1”。“basket_details”这是通道名称,1是参数。 当我使用公共频道时,一切都很完美。因此,我认为auth部分存在一些问题。 这是我的错误日志 这是我的事件文件。 这是我的频道。php 这是我的js文件 这是我的BroadcastServiceProvider 这是我的laravel

  • 我与Laravel有一个项目,负责管理endpoint调用,并通过Vue控制前端。 当用户登录时,响应(令牌)保存在本地存储中,然后在app.js我将此令牌自动添加到所有调用中。 登录 应用程序。js 现在,我们将看到问题。 当我们转到第二页时,将自动启动endpoint调用以填充一些输入。此调用理论上具有本地存储令牌。 路由(APIendpoint) 头部控制器 这将返回拒绝访问。令牌在标头中被

  • 取消验证也被称为解除身份验证攻击。这种攻击非常有用,这种攻击允许我们断开任何设备与范围内的任何网络的连接,即使网络具有加密或使用密钥。 在解除身份验证攻击攻击中,我们假装是客户端并通过将我们的MAC地址更改为客户端的MAC地址,并向路由器发送我们想要断开连接的路由器来向路由器发送解除认证数据包。与此同时,我们将伪装成路由器,将我们的MAC地址更改为路由器的MAC地址,直到我们请求断开连接的客户端为

  • 因此,为了实现这个逻辑,我认为我需要在客户端验证JWT令牌。Q1,这是一个明智的做法吗。 Q2,我正在使用的库似乎需要一个公钥才能使用它的函数。我似乎没有公钥,只有一个秘密,这是我刚刚编造的,所以它不是用一对生成的。我的公钥从何而来,或者是否有另一种方法来验证我的令牌而不使用此方法? 这一切似乎应该是显而易见的,我错过了一些东西,所以很抱歉,如果这是一个愚蠢的问题,但我似乎找不到答案?

  • 我的服务器上再次收到错误。 { “错误”: “invalid_client” } 我已经编码到base64并将域列入了白名单,但仍然得到相同的错误。我会感激任何帮助,这让我发疯了,哈哈。