По ряду причин решил написать свою stateless-аутентификацию для API. Причем, не просто middleware, а именно так, чтобы интегрировать ее по уму, т.е. в Код (Text): config/auth.php прописать вроде PHP: 'defaults' => [ 'guard' => 'api', 'passwords' => 'users', ], 'guards' => [ 'api' => [ 'driver' => 'myveryauth', 'provider' => 'users', ], ], и т.д. Но я такого никогда не делал, можете набросать последовательность действий для реализации простейшего варианта? Прям без самой логики аутентификации (это я потом туда допишу). Типа логика аутентификации такая: PHP: $user = User::find(request('id')); )))) Какие шаги нужно сделать, чтобы грамотно интегрировать эту логику аутентификации в Laravel вышеописанным способом?
Ну кстати первую подсказку я нашел как ни странно в офф доках))) http://laravel.su/docs/5.5/authentication#adding-custom-guards Однако ларавелевские доки традиционно лаконичны и не менее туманны)) В том смысле что ориентированы на юзеров пишущих в ларавеле еще с первой его версии))
примеров нагугливается достаточно много. вопрос в том, что именно ты хочешь изменить по сравнению со встроенной аутентификацией.
А поговорить как же?)) Гугль неразгоорчиый) --- Добавлено --- ...что именно? Да я скорее хочу разобраться досконально в этом. А это лучше всего делать когда пишешь реализацию.
Копаюсь сейчас в кодах и манах, пытаюсь понять откуда растут ноги у driver в guard аутентификации. Это то, что мне сейчас нужно. Если кто знает - колитесь!)) Вот, например, пишу я в конфиге: PHP: 'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => false, ], и откуда оно потом этот 'token' достает?
Могу подкинуть практическую задачу по теме. Поговорим Есть сайт Laravel.ru. на нем форум на движке fluxbb и, похоже, кроме него странички на Laravel. На форуме есть система лайков. И вот в ней прокол по аутентификации/авторизации. Приходится второй раз логиниться. Тот сайт не мой, но задача мне близка, т.к. пользуюсь и форумом и ларавелем. Задача: 1. Настроить аутентификацию Laravel так, чтобы он мог использовать хеш пароля из fluxbb. 2. Использовать для идентификации куку от fluxbb. Естественно движки будут на одном домене.
ага... вот здесь рассматривают вопрос: https://stackoverflow.com/questions/32243363/how-to-create-laravel-5-1-custom-authentication-driver - в общем, есть с чем разбираться)))
Здесь 'token' это как бы алиас для добычи гарда. В инете ты можешь увидеть такой пример: PHP: Auth::extend('access_token', function ($app, $name, array $config) { // automatically build the DI, put it as reference $userProvider = app(TokenToUserProvider::class); $request = app('request'); return new AccessTokenGuard($userProvider, $request, $config); });
И ну это какбе попроще задача-то, и не совсем-таки по теме Если пошагово, то примерно так бы я сделал: 1. Посмотреть чем именно fluxbb хэширует пароли. 2. Переделать в Laravel механизм хэширования на п.1 3. Переписать получение хэша из запроса на получение хэша из куки fluxbb. 4... да какбы вроде и всё)))) Хотя, если это делать без костылей - то дьявол в нюансах, как обычно
Попроще потому что я сделал декомпозицию задачи но не думаю что ты так запросто справишся. --- Добавлено --- Сложность в том, что встроенные в ларавель механизмы не имеют прямого аналога с тем что здесь надо. Флаксбб не использует сессию, а только куку. В пятом ларавеле нет гарда использующего куку без сессии.
Так это вроде из мануала пример-то) btw, спасибо. Я по крайней мере смог сформулировать задачу на данном этапе: - Мне нужно написать свой драйвер для гарда Но это судя по всему не так просто, потому что оно тащит за собой новые, незнакомые мне ларавелевские сущности, типа "контракта" который нужно имплементировать, и т.п. )) Вот ну нахрена они наплодили на ровном месте такие сложности-то? //не обращайте внимания, это мой извечный риторический вопрос к создателям фреймворков)) --- Добавлено --- Не люблю я видосы - очень уж долго их смотреть, ибо читаю я оч быстро)) но похоже это именно тот самый случай, когда придется смотреть))) --- Добавлено --- Ой, давай вот без вот этого "но не думаю что ты так запросто справишся" - оставим это детям пожалуй))) ибо это избыточные сущности не несущие никакой полезной инфы))) Насчет куки и сессий - усек, да. А что если сделать это как API а хэш - это типа токена будет? )) Ну, я просто прикидываю как это может быть реализовано проще всего.
https://github.com/tymondesigns/jwt-auth/blob/develop/src/Providers/AbstractServiceProvider.php собсно, вот. примерно так выглядит ответ на твой вопрос (я про репу в целом, а в провайдере можно посмотреть как это регистрируется).
Кстати, автор вышеприведенного видоса - оч хорош в роли препода)) рад тому что открыл его - рекомендую Убунте к просмотру хороших преподов меньше чем хороших программистов --- Добавлено --- omg )))) от души он так трейтов подключил там ))))) да и вообще... ок, спасибо! буду иметь в виду конечно же
Ну так да, но эта репа реализует именно твою хотелку. Stateless jwt-токены с интеграцией в laravel. Прям вот правильно, по стандартам и канону )
Да, я его уже подключал, пробовал. Работает Но таки хочется своего провайдера смастерить неспешно так))
@Roman __construct, смастери, ничего сложного. Делал я на одном проекте, у которого не ложилась структура базы на Eloquent (не мной сделанная. заказчик тогда настоял на своей структуре)
ага, бывало. ругались прям иногда)))))) там просто заказчик был - тож программер, причем, именно спец по базам, для него это святое)))) а я просто дурел с его привычки называть таблицы и поля КАПСОВЫМИ_НАЗВАНИЯМИ и именовать столбцы примерно так STR_SOMESTRING или LONGINT_MYNUMBER но это еще цвечтоки. впрочем, ладно)) хорошо что это закончилось))
Смотрите чего нагуглилось https://code.tutsplus.com/ru/tutori...om-authentication-guard-in-laravel--cms-29667 Если это работает (косится на фотку автора)))) то это то что нужно по сабжу
ну, пример вроде рабочий нашел небольшую ошибку в User.php: PHP: $arr_user = $this->conn->find('users', ['username' => $credentials['username']]); он захардкодил имя базы 'users', но до этого он указал его как конфигурируемый параметр в mongo.php то есть если вы там что-то другое пропишете - самолет не взлетит)) в общем, теперь надо это всё осмыслить и переписать на что-то приличное, типа MySQL)) для начала ))))))