【发布时间】:2018-08-02 17:52:37
【问题描述】:
我正在使用 Laravel Event Broadcast 和 Pusher 在我的 API 和 Web 上使用 websocket。如果我单独尝试它们,两者都可以正常工作。我的意思是:
Broadcast::routes(['middleware' => 'web']); // this works for my Laravel website
Broadcast::routes(['middleware' => 'auth:api']); // this works for my api
但是,如果我想像这样同时使用两者:
Broadcast::routes(['middleware' => ['auth:api', 'web']]); // doesn't work
...两者都崩溃了,我怀疑这是假设我正在尝试为auth:api && web 中间件启用。
有没有办法为此使用 OR 类型的语句(auth::api || 'web')?如果我想同时使用两者,并且如果它通过一个中间件,它会绕过中间件。
请注意,我正在为我的 api 使用 Laravel Passport。
或者有没有一种方法可以为两者组合并创建一个混合中间件(本质上将检查 api 或 web)?所以我可以使用这样的东西:
Broadcast::routes(['middleware' => 'broadcast']); // or auth:broadcast
更新:
据我了解,如果我创建一个名为broadcast 的新中间件,我可以这样做:
class BroadcastMiddleware() {
public function handle() {
$web = Auth::guard('web')->user();
if ($web) {
return response()->json($web);
}
$api = Auth::guard('api')->user();
if ($api) {
return response()->json($api);
}
return response()->json('Unauthorized.', 500);
}
}
但是那我该如何更改/broadcasting/auth 路由呢?如果我试试这个:
Route::post('/realtime/auth', function(){
return true;
})->middleware('broadcast');
这会返回用户对象信息,然而,它应该返回类似:auth:"374f7ff42b7da877aa35:c29addedec281b418331a61dc3cfc74da8b108222565fa4924a8..."
【问题讨论】:
标签: laravel middleware laravel-5.5 laravel-passport laravel-events