我正在设置一个laravel-echo-server,当我尝试对私有通道进行身份验证时,我收到错误:客户端无法通过身份验证,获得HTTP状态404.
授权公共渠道有效.
//channels.php
Broadcast::channel('private-test', function($user) {
return true;
});
Run Code Online (Sandbox Code Playgroud)
//用于向私有频道进行身份验证的前端脚本
window.Echo.private('private-test')
.listen('TestMessage', (e) => {
app.updateChat(e);
});
Run Code Online (Sandbox Code Playgroud)
//laravel-echo-server.json
{
"authHost": "basic.test",
"authEndpoint": "/broadcasting/auth",
"clients": [],
"database": "redis",
"databaseConfig": {
"redis": {},
"sqlite": {
"databasePath": "/database/laravel-echo-server.sqlite"
}
},
"devMode": false,
"host": null,
"port": "6001",
"protocol": "http",
"socketio": {},
"sslCertPath": "",
"sslKeyPath": "",
"sslCertChainPath": "",
"sslPassphrase": "",
"apiOriginAllow": {
"allowCors": false,
"allowOrigin": "",
"allowMethods": "",
"allowHeaders": ""
}
}
Run Code Online (Sandbox Code Playgroud)
//bootstrap.js
window._ = require('lodash');
/**
* We'll load jQuery and the Bootstrap jQuery …
Run Code Online (Sandbox Code Playgroud) 问题:我无法在中间件中找到{id}参数.我的中间件需要获取{id}参数,以验证Auth :: user()是否是指定组的所有者.
请求示例:groups/admin/open/4 - >将打开第4组.
是)我有的:
路线:
Route::post('groups/admin/open/{id}', 'GroupController@opengroup')->middleware(['auth','owner']);
Run Code Online (Sandbox Code Playgroud)
我的中间件('所有者')仍然是空的.
我尝试了什么:1.在函数中添加$ id参数(就像在控制器中一样),如下所示:
public function handle($request, /* Added -> */ $id, Closure $next)
{
dd(Input::get('id'));
return $next($request);
}
Run Code Online (Sandbox Code Playgroud)
这会返回一个错误:
Argument 3 passed to App\Http\Middleware\RedirectIfNotOwner::handle() must be an instance of Closure, none given
Run Code Online (Sandbox Code Playgroud)
最后,$ id的不同位置会导致错误:
Missing argument 3 for App\Http\Middleware\RedirectIfNotOwner::handle()
Run Code Online (Sandbox Code Playgroud)
我试过的2:我想过要改变我的网址
请求示例:groups/admin/open?groupparam = 4
并使用
Input::get('groupparam');
Run Code Online (Sandbox Code Playgroud)
但这迫使我改变我的控制器等.这仍然是一个选择.
问的理由:此外我相信Laravel也有能力在中间件中检索{id} params,非常漂亮.我只是不知道如何.
你能帮助我吗?
谢谢,
Eltyer