Итак, как говорится в моем заголовке, я хочу изменить стандартное Broadcast
аутентификационное промежуточное ПО Laravel на собственное аутентификационное промежуточное ПО, которое я создал и использует аутентификацию на основе токенов. Я сделал это потому, что мое приложение является приложением на основе API, и, когда пользователь проходит аутентификацию, я создаю токен сеанса и отправляю ему, а также сохраняю в БД со столбцом expires_at
.
Я использую Pusher
.
У меня есть следующее промежуточное ПО:
class AuthCustom
{
public function handle($request, Closure $next)
{
// if we have the session token stored in header
if ($request->header('x-session')) {
$session = Session::where('id', $request->header('x-session'))->where('expires_on', '>=', date('Y-m-d G:i:s'))->with('user')->first();
if ($session !== null) {
$user = (new User())->where('id', $session->user_id)->first();
if ($user !== null) {
$request->merge(['user' => $user]);
return $next($request);
}
}
}
}
Мой BroadcastServiceProvider
код выглядит следующим образом:
class BroadcastServiceProvider extends ServiceProvider
{
public function boot()
{
Broadcast::routes();
require base_path('routes/channels.php');
}
}
Если я поставлю Broadcast::routes(['middleware' => 'authcustom']);
в BroadcastServiceProvider
, boradcasting/auth
даст код состояния 403
, потому что $request->user()
имеет значение null, что затем приводит к Access forbidden
.
Я попытался выполнить поиск по всему проклятому вебу и ничего не нашел об изменении стандартного промежуточного программного обеспечения для вещания.
Я даже пытался удалить Broadcast::routes()
и настроить новый маршрут /broadcast
, который возвращал объект Pusher
socket_auth
, и каждый раз, когда я получал 419 Unkown
код состояния.
Есть идеи или, может быть, вы можете указать мне направление, в котором я мог бы справиться?
Спасибо!
Позже редактировать:
Мое соединение JS Echo выглядит так:
Vue.use(VueEcho, {
broadcaster: 'pusher',
key: 'xxxxxxxxxxxxxx',
cluster: 'eu',
authEndpoint: 'http://localhost/api.easycargo.ro/public/broadcasting/auth',
auth: {
headers: {
'x-session': this.auth.token
}
}
});