Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добрый день. Хочу, используя существующий функционал broadcast, используя авторизованные каналы (когда сокет связан с сессией - то есть связан с конкретным юзером) - записывать в базу этому юзеру поле online. То есть мне надо отслеживать подключение и разрыв соединения по сокету для каждого юзера. Как это сделать?
Добрый день. Допустим, есть сайт с авторизацией.
Нужно для авторизованного юзера брать какие-либо данные и выводить это на всех страницах сайта. Как правильно это реализовать - в Middleware? они предназначены не для этого, в ServisProvider? в нем нет доступа к сессии - нельзя получить авторизованного юзера. Или создавать метод в модели? хотя, данные эти, например, берутся не из бд?
Нормально ли в модели писать методы - которые получают данные не из бд - а например запросом вообще на другой ресурс, к какой-нить апишке...?
В этом примере по сути из объекта класса модели User (а объект класса модели User - это по сути - один конкретный юзер) мы получаем набор юзеров. Это как-то против человеческой логики.))
Добрый день.
Многие слышали выражение - "толстый, тупой, уродливый контроллер".
Это выражение означает, что кодеры любят запихивать всю логику приложения в контроллеры, практически не используя модель.
Так как же должна выглядеть модель в Laravel, чтобы контроллеры не были тупыми.
Первый вопрос - можно ли в модели писать свои статические методы?
Подобные: User::selectTops(), Post::selectGoods($user_id), ...
То есть методы - в которых идет сложная выборка с джойнами, группировками и т.д.
Многие считают, что такие методы создавать не стоит, как считаете вы?
Нашел хороший выход, поделюсь им))
AuthController, метод login()
...
$auth = Auth::guard($this->getGuard());
if ($auth->attempt($credentials, false, false)) {
$user = $auth->getLastAttempted();
if ($user->confirmed) {
$auth->login($user, $request->has('remember'));
return $this->handleUserWasAuthenticated($request, $throttles);
} else {
...
}
}
...
Фокус в том, что объект гарда позволяет не авторизовывать юзера в методе attempt(), путем передачи 3-го параметра - $login = FALSE.
И мы можем получить юзера, найденного по логину и паролю, методом getLastAttempted() нашего гарда. И соответственно есть метод login() у гарда. Удается все сделать красиво и правильно, без лишних событий авторизации и т.д.
Такое ощущение, что вы не совсем поняли о чем идет речь.
Мне не нужны middleware. Мне не нужно никакое определение каждый запрос.
Я переопределяю метод login() (он из какого-то трейта) в AuthController. То есть метод, когда человек ввел свой логин/email и пароль. И в этом методе, если все удачно, он записывается в сессию и будет авторизован, иначе нет. Зачем мне какие-то middleware использовать? когда все делается в одном методе. Зачем мне какая-то проверка Auth::check(); Auth::user->is_validated == false ? redirect : closure->next; Когда, если в методе login() проверка прошла, то все, человек авторизован, и далее мне никаких проверок не нужно, пока сессия не закончится, и ему заново не нужно будет вводить свои логин и пароль.
Middleware твой путь, о падаван!)))
там проверил и куда-надо переадресовал, или флаг какой-нить придумал...
Вариаций море
Мне не нужен флаг, мне нужно, чтобы, если email не подтвержден, авторизация не срабатывала.
Я могу даже передать в $credentials - 'confirmed' => 1, и это будет работать, но я не узнаю из-за чего не прошла авторизация (либо нет вообще такого юзера, либо не подтвержден email).
Зачем усложнять? Если в таблице users есть поле verified, можно просто проводить проверку:
if (Auth::user()->verified)
Это первое, что приходит в голову) Но это скорее - костыль) К тому же срабатывает аутентификация, в remember_token записывается токен, а потом, если юзер не verified, надо делать auth()->logout() . Кроме того мне это не подходит, так как именно в remember_token, я записываю хеш, который отсылаю в письме для подтверждения (тоже похоже на костыль, но неохото делать лишнее поле в табличке, которое часто будет пустым).
Привет всем)
В AuthController мне нужно использовать свой метод Auth::attempt(). Мне надо проверять на то, подтвержден ли у юзера email. То есть в табличке users дополнительное поле... это не важно)) Поэтому мне нужен свой метод Auth::attempt(), который не просто возвращает TRUE/FALSE, а возвращает например, что юзер есть, но не подтвержден... для вывода разных ошибок.
Как сделать?, что переопределять? Нужно ли делать свой драйвер аутентификации? Как сделать правильно, подскажите, мастера)
Привет всем. Подскажите, куда принято класть сторонние классы, например, класс для работы с каким-нибудь сервисом.
Страницы 1