Как изменить стандартное промежуточное программное обеспечение для аутентификации Laravel

Итак, как говорится в моем заголовке, я хочу изменить настройки Laravel по умолчанию Broadcast промежуточное программное обеспечение для аутентификации на собственное промежуточное программное обеспечение для аутентификации, которое я создал и использует аутентификацию на основе токенов. Я сделал это потому, что мое приложение является приложением на основе 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() является нулевым, что затем приводит к 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
}
}
});

1

Решение

Я рад, что у вас что-то работает. Для более поздних читателей, вот более ларавелеский способ решения проблемы в вопросе: создать кастомная защита используется для проверки подлинности запросов для специальных маршрутов.

Laravel-х AuthManager включает вспомогательный методviaRequest()— что упрощает создание Guard который аутентифицирует пользователя с данными из контекста запроса без необходимости полной реализации Illuminate\Contracts\Auth\Guard, Мы можем связать нашу таможню в boot() метод в AuthServiceProvider.php:

public function boot()
{
Auth::viaRequest('custom-auth', function ($request) {
// Any custom user-lookup logic here. For example:
if ($request->header('x-session')) {
$user = // ...try to fetch a user...
return $user;
}
});
}

Как мы видим, мы просто передаем закрытие viaRequest() метод, который возвращает User объект при успешной аутентификации, или null когда аутентификация не проходит.

Далее мы расскажем Laravel о нашей новой аутентификации, добавив запись в 'guards' массив в конфиг / auth.php:

'guards' => [
...
'broadcasting' => [
'driver' => 'custom-auth',
],
],

Наконец, нам нужно обновить промежуточное ПО для любых маршрутов, которые должны аутентифицировать пользователя с помощью нашего пользовательского интерфейса. Guard, Мы можем использовать встроенное в Laravel промежуточное программное обеспечение для аутентификации и указать, какой сторож использовать в качестве параметр промежуточного программного обеспечения. Например, мы инициализируем маршруты вещания в вопросе BroadcastServiceProvider.php:

Broadcast::routes([ 'middleware' => [ 'auth:broadcasting', ... ] ]);

…где broadcasting соответствует имени, которое мы присвоили нашему обычаю Guard в конфиг / auth.php.

Этот подход позволяет нам использовать все Laravel’s Auth услуги, предоставляет более центральное место для определения нашей логики аутентификации и упрощает автоматизированное тестирование, потому что мы можем легче макетировать аутентификацию по мере необходимости.

2

Другие решения

Мне действительно удалось найти решение, поэтому все, что мне нужно было сделать, это связать $user что я получил в моем обычае auth Промежуточное программное обеспечение для запроса, выполнив следующее:

$request->merge(['user' => $user]);

//add this
$request->setUserResolver(function () use ($user) {
return $user;
});

и сейчас $request->user() который проверяет laravel, возвращает объект пользователя и проходит проверку.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector