Laravel 5.6 Passport 驱动程序在 socket.io 中不起作用并给出未经授权的异常
Posted
技术标签:
【中文标题】Laravel 5.6 Passport 驱动程序在 socket.io 中不起作用并给出未经授权的异常【英文标题】:Laravel 5.6 Passport driver not working in socket.io and gives unauthorized exception 【发布时间】:2018-08-11 01:44:35 【问题描述】:当驱动程序是 api 时,以下代码运行良好。然后我创建了一个新项目并将驱动程序更改为护照。
现在,我总是收到错误:未经授权。我可以确认请求标头在浏览器中有授权令牌代码。 请点击下方图片查看,然后点击放大查看质量更好的图片。
我是否遗漏了以下代码中的任何内容?如果您需要更多信息,请告诉我。
bootstrap.js
import Echo from 'laravel-echo'
window.Echo = new Echo(
broadcaster: 'socket.io',
host: window.location.hostname + ':6001',
auth:
headers:
Authorization: 'Bearer' + localStorage.getItem("token")
);
使用 Web socket.io 发布消息的代码
var config =
headers :
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + localStorage.getItem('token')
;
var request =
"channel": "private-Send-Message-Channel." + message.Sent_To,
"name": "MessengerEvent",
"data":
"msg": message
,
"socket_id": socketId
;
var url = "http://localhost:6001/apps/786d1c1c820025f4/events?auth_key=be1699f0101880f673fdff7ff203334f";
axios.post(url, JSON.stringify(request), this.config).then(response =>
//success callback
);
当最后一行代码运行 (axios.post
) 时,它会给出 403,未经授权的异常。
我可以确认令牌存在于标头中。
更新 - 1
我有两个示例项目。一个带有驱动程序 = api,另一个带有驱动程序 = 护照。当我使用 driver : api 时,没有问题。上述问题仅适用于司机 = 护照。
【问题讨论】:
这个问题你解决了吗? 【参考方案1】:您是否遵循护照文件:https://laravel.com/docs/5.6/passport?
为了获得 OAuth 身份验证,除了不记名令牌之外,您还需要在正文中添加更多参数。
"grant_type":"password",
"client_id":"CLIENT_ID",
"client_secret":"YOUR_SECRET",
"username":"USERNAME",
"password":"PASSWORD",
"scope":""
【讨论】:
以上是关于Laravel 5.6 Passport 驱动程序在 socket.io 中不起作用并给出未经授权的异常的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.6 - 用于自助API的Passport JWT httponly cookie SPA身份验证?
laravel + passport 搭建 api 认证系统 基础应用
每天一点点之laravel框架 - Laravel5.6 + Passport实现Api接口认证
Laravel 5.6 护照 API 身份验证在获取请求中不起作用
laravel Passport - 创建 REST API 用户认证以及Dingo/Api v2.0+Passport实现api认证