Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Laravel 5.x » Как писать в базу при подключении/отключении сокета Laravel 5.7 » 21.01.2019 11:56:27

grungestranger
Ответов: 0

Добрый день. Хочу, используя существующий функционал broadcast, используя авторизованные каналы (когда сокет связан с сессией - то есть связан с конкретным юзером) - записывать в базу этому юзеру поле online. То есть мне надо отслеживать подключение и разрыв соединения по сокету для каждого юзера. Как это сделать?

#2 Laravel 5.x » Как получать данные для юзера? » 02.02.2018 12:12:28

grungestranger
Ответов: 1

Добрый день. Допустим, есть сайт с авторизацией.
Нужно для авторизованного юзера брать какие-либо данные и выводить это на всех страницах сайта. Как правильно это реализовать - в Middleware? они предназначены не для этого, в ServisProvider? в нем нет доступа к сессии - нельзя получить авторизованного юзера. Или создавать метод в модели? хотя, данные эти, например, берутся не из бд?
Нормально ли в модели писать методы - которые получают данные не из бд - а например запросом вообще на другой ресурс, к какой-нить апишке...?

#3 Re: Laravel 5.x » Как должна выглядеть "Правильная" модель ? » 01.06.2017 12:38:32

В этом примере по сути из объекта класса модели User (а объект класса модели User - это по сути - один конкретный юзер) мы получаем набор юзеров. Это как-то против человеческой логики.))

#4 Laravel 5.x » Как должна выглядеть "Правильная" модель ? » 01.06.2017 12:09:55

grungestranger
Ответов: 5

Добрый день.
Многие слышали выражение - "толстый, тупой, уродливый контроллер".
Это выражение означает, что кодеры любят запихивать всю логику приложения в контроллеры, практически не используя модель.
Так как же должна выглядеть модель в Laravel, чтобы контроллеры не были тупыми.

Первый вопрос - можно ли в модели писать свои статические методы?
Подобные: User::selectTops(), Post::selectGoods($user_id), ...
То есть методы - в которых идет сложная выборка с джойнами, группировками и т.д.

Многие считают, что такие методы создавать не стоит, как считаете вы?

#5 Re: Laravel 5.x » Свой метод Auth::attempt » 23.08.2016 17:03:58

Нашел хороший выход, поделюсь им))

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() у гарда. Удается все сделать красиво и правильно, без лишних событий авторизации и т.д.

#6 Re: Laravel 5.x » Свой метод Auth::attempt » 22.08.2016 21:59:32

Такое ощущение, что вы не совсем поняли о чем идет речь.

Мне не нужны middleware. Мне не нужно никакое определение каждый запрос.
Я переопределяю метод login() (он из какого-то трейта) в AuthController. То есть метод, когда человек ввел свой логин/email и пароль. И в этом методе, если все удачно, он записывается в сессию и будет авторизован, иначе нет. Зачем мне какие-то middleware использовать? когда все делается в одном методе. Зачем мне какая-то проверка Auth::check(); Auth::user->is_validated == false ? redirect : closure->next; Когда, если в методе login() проверка прошла, то все, человек авторизован, и далее мне никаких проверок не нужно, пока сессия не закончится, и ему заново не нужно будет вводить свои логин и пароль.

#7 Re: Laravel 5.x » Свой метод Auth::attempt » 22.08.2016 18:02:07

hzone пишет:

Middleware твой путь, о падаван!)))
там проверил и куда-надо переадресовал, или флаг какой-нить придумал...
Вариаций море smile

Мне не нужен флаг, мне нужно, чтобы, если email не подтвержден, авторизация не срабатывала.
Я могу даже передать в $credentials - 'confirmed' => 1, и это будет работать, но я не узнаю из-за чего не прошла авторизация (либо нет вообще такого юзера, либо не подтвержден email).

#8 Re: Laravel 5.x » Свой метод Auth::attempt » 22.08.2016 17:36:59

AlexeyMezenin пишет:

Зачем усложнять? Если в таблице users есть поле verified, можно просто проводить проверку:

if (Auth::user()->verified)

Это первое, что приходит в голову) Но это скорее - костыль) К тому же срабатывает аутентификация, в remember_token записывается токен, а потом, если юзер не verified, надо делать auth()->logout() . Кроме того мне это не подходит, так как именно в remember_token, я записываю хеш, который отсылаю в письме для подтверждения (тоже похоже на костыль, но неохото делать лишнее поле в табличке, которое часто будет пустым).

#9 Laravel 5.x » Свой метод Auth::attempt » 22.08.2016 17:25:02

grungestranger
Ответов: 8

Привет всем)

В AuthController мне нужно использовать свой метод Auth::attempt(). Мне надо проверять на то, подтвержден ли у юзера email. То есть в табличке users дополнительное поле... это не важно)) Поэтому мне нужен свой метод Auth::attempt(), который не просто возвращает TRUE/FALSE, а возвращает например, что юзер есть, но не подтвержден... для вывода разных ошибок.

Как сделать?, что переопределять? Нужно ли делать свой драйвер аутентификации? Как сделать правильно, подскажите, мастера)

#10 Laravel 5.x » Куда положить сторонние классы? » 12.08.2016 09:56:48

grungestranger
Ответов: 1

Привет всем. Подскажите, куда принято класть сторонние классы, например, класс для работы с каким-нибудь сервисом.

Подвал раздела