sen*_*nty 5 middleware laravel laravel-events laravel-passport laravel-5.5
我正在使用 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
Run Code Online (Sandbox Code Playgroud)
但是,如果我想像这样同时使用两者:
Broadcast::routes(['middleware' => ['auth:api', 'web']]); // doesn't work
Run Code Online (Sandbox Code Playgroud)
...它同时崩溃,我怀疑它假设我正在尝试为两个auth:api && web中间件启用。
有没有办法为此使用 OR 类型的语句(auth::api || 'web')?如果我想同时使用两者,并且如果它通过一个中间件,它会绕过中间件怎么办。
请注意,我的 api 使用的是 Laravel Passport。
或者有没有办法为两者结合并创建一个混合中间件(这将基本上检查 api 或 web)?所以我可以使用这样的东西:
Broadcast::routes(['middleware' => 'broadcast']); // or auth:broadcast
Run Code Online (Sandbox Code Playgroud)
更新:
据我了解,如果我创建一个名为 的新中间件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);
}
}
Run Code Online (Sandbox Code Playgroud)
但是我该如何改变/broadcasting/auth路线呢?如果我试试这个:
Route::post('/realtime/auth', function(){
return true;
})->middleware('broadcast');
Run Code Online (Sandbox Code Playgroud)
这将返回用户对象信息,但是,它应该返回如下内容: auth:"374f7ff42b7da877aa35:c29addedec281b418331a61dc3cfc74da8b108222565fa4924a8..."
为什么不在 BroadcastServiceProvider 中使用这样的东西?这将创建两个单独的端点,并分配了单独的中间件。
Broadcast::routes(['middleware' => 'web']);
Broadcast::routes(['prefix' => 'api', 'middleware' => 'api']);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6681 次 |
| 最近记录: |