首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法对laravel-echo-server - Client进行身份验证,获得HTTP状态403 JWT auth

无法对laravel-echo-server - Client进行身份验证,获得HTTP状态403 JWT auth
EN

Stack Overflow用户
提问于 2018-08-18 09:09:10
回答 1查看 2.8K关注 0票数 0

我在建一个SPA。我用拉拉做后端,用vuejs做前端。他们在不同的港口独立运行。(使用拉拉api)

  • Laravel正在运行8000
  • Vue在8082上运行

我允许用户使用JWT Auth进行身份验证。

我正在尝试使用laravel-echo-server制作一个实时数据传输应用程序,并且使用公共通道传输数据,这非常有效。

现在,我需要使用私有频道向经过身份验证的用户广播数据,这是我无法弄清楚如何使其工作的地方,而且我正在收到错误,例如

代码语言:javascript
运行
复制
NuG9yhe46E3N9Q6zAAAA could not be authenticated to private-some-p
rivate-channel

Client can not be authenticated, got HTTP status 403

这里是laravel-echo-server.json文件

代码语言:javascript
运行
复制
{
    "authHost": "http://localhost:8000",
    "authEndpoint": "/broadcasting/auth",
    "clients": [
        {
            "appId": "mprimeapp",
            "key": "d8f6639653d0c4f31efa56d27f6ab502"
        }
    ],
    "database": "redis",
    "databaseConfig": {
        "redis": {
            "port": "6379",
            "host": "127.0.0.1"
        },
        "sqlite": {
            "databasePath": "/database/laravel-echo-server.sqlite"
        }
    },
    "devMode": true,
    "host": "localhost",
    "port": "8890",
    "protocol": "http",
    "socketio": {},
    "sslCertPath": "",
    "sslKeyPath": "",
    "sslCertChainPath": "",
    "sslPassphrase": "",
    "apiOriginAllow": {
        "allowCors": true,
        "allowOrigin": ["http://localhost:8000", "http://localhost:8082"],
        "allowMethods": "GET, POST",
        "allowHeaders": "Origin, Content-Type, X-Auth-Token, X-Requested-With, Accept, Authorization, X-CSRF-TOKEN, X-Socket-Id"
    }
}

我使用的是redis不是sqlite数据库,也正在运行。

我的main.js文件vue应用程序

代码语言:javascript
运行
复制
const tokenData = JSON.parse(window.localStorage.getItem('authUser'))
if (tokenData !== null) {

  window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: 'http://localhost:8890',
    auth: {
      headers: {
        'Authorization': 'Bearer ' + tokenData.token
      }
    }
  })
}

window.Echo.private('some-private-channel')
  .listen('SomeEvent', (e) => {
    console.log(e)
  })

这是我想问的一些新问题。

  1. authEndpoint中的laravel-echo-server.json文件,它是如何工作的?我是否必须在我的api.php文件中设置一个端点来验证用户身份。
  2. 客户端数组在laravel-echo-server.json文件中,它内部的数据有什么用途?

在Laravel应用程序内部config/app.php

我有这行未注释的App\Providers\BroadcastServiceProvider::class

在BroadcastServiceProvider.php中

代码语言:javascript
运行
复制
 public function boot()
    {
        Broadcast::routes([ 'middleware' => [ 'auth:jwt.auth' ] ] ]);
        require base_path('routes/channels.php');
    }

更新

上面的功能似乎有问题。更具体的事情-- [ 'middleware' => [ 'api', 'jwt.auth' ] ]

更改中间件数组后获得此错误

代码语言:javascript
运行
复制
[15:58:13] - vAKK8BO7vs2TZy4SAAAA could not be authenticated to private-some-private-channel
{
    "message": "Auth guard [jwt.auth] is not defined.",
    "exception": "InvalidArgumentException",
    "file": "C:\\xampp\\htdocs\\mipm-l\\vendor\\laravel\\framework\\src\\Illuminate\\Auth\\AuthManag
er.php",
.....
.....
.....
EN

回答 1

Stack Overflow用户

发布于 2018-11-12 20:27:48

您是否安装并配置了JWT包https://github.com/tymondesigns/jwt-auth?(对不起,您没有提到)还要确保您的Kernel.php中有以下几行

代码语言:javascript
运行
复制
   protected $routeMiddleware = [
    ...
    'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class,
    'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class,
    ...
    ];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51907044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档