Тёмный

Форма аутентификации в Laravel | Регистрация пользователя в Laravel | Laravel Authentication 

Lectoria. Обучение веб-разработке.
Просмотров 35 тыс.
50% 1

В этом уроке мы разберем механизмы аутентификации и регистрации в Laravel 8, создадим простые формы регистрации и аутентификации и наполним их логикой.
Тема эта довольно обширная, поэтому в рамках одного урока мы пройдемся по основам, которые позволят вам понять общие механизмы, уловить суть и понять, как модифицировать логику конкретно под ваш проект.
---------------------------------
✅ Сайт проекта Lectoria: lectoria.pro?BJ5w
▶️ RU-vid-канал по изучению MODX Revolution: / openmodx

Опубликовано:

 

11 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 127   
@АлександрБабкин-л8т
Исчерпывающая понятная инструкция! Огромное спасибо!
@vityurov
@vityurov 3 года назад
Сразу видно опытный разработчик laravel, спасибо!
@mexvision-3556
@mexvision-3556 3 года назад
Проверки на существование пользователя и тому подобное уже существуют в валидаторе: 'name' => ['required', 'string', 'max:64'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], (unique:users) - проверяет уникальность данного параметра в таблице users 'password' => ['required', 'string', 'min:6', 'max:16', 'confirmed'], (confirmed) - проверяет правильно ли мы подтвердили наш пароль
@KaiRodriges
@KaiRodriges 3 года назад
Спасибо, очень доступно раскрыта тема, хотелось бы дополнения именно к этой теме, так как это касается безопасности в целом.
@lectoria
@lectoria 3 года назад
Все будет )
@lectoria
@lectoria 3 года назад
На очереди тема гейтов и политик
@ДмитрийБулаенко-ь8д
Благодарю за урок! толково, без воды и по делу!!! Спс за труд!!!
@vladosbarbos
@vladosbarbos 3 года назад
Видео про гейты и политики было бы интересно еще посмотреть)
@КоляСолдат
@КоляСолдат 2 года назад
Урок богатый пищей для развития, спасибо)
@rubr0nyx
@rubr0nyx 2 года назад
Спасибо, очень много полезной информации доступно рассказал и показал. Мне очень пригодилось! :)
@bulocka5986
@bulocka5986 10 месяцев назад
Все очень интересно и реально познавательно, но может можно это все файлом к примеру на гитхаб скинуть?
@esmino6141
@esmino6141 2 года назад
Спасибо! Все получилось с 1 го раза! Чувствуется сразу профессионализм автора) Все четко и по полочкам. Единственно еще интересно было бы узнать, как сделать, чтоб после аутентификации, в меню пункт ,допустим, "вход" менялось на email/имя пользователя, думаю, Вы понимаете о чем я)
@lectoria
@lectoria 2 года назад
Ну это же не так сложно: ставите в шаблоне @auth {{ Auth::user()->email }} @endauth @guest Вход @endguest
@КоляСолдат
@КоляСолдат 2 года назад
@@lectoria маленькая но нужная деталь, отдельное спасибо что добиваете вопросы в комментах.
@NeoJohnSmit
@NeoJohnSmit 3 года назад
Огонь, благодарю за урок!
@GTar1998
@GTar1998 3 года назад
Просто спасибо большое за труд!
@talgatkulzhanov
@talgatkulzhanov 2 года назад
Артем большое спасибо! Сделайте пожалуйста видео аутентификацию с почта/телефон или через соцсети или только через гугл и с кнопкой запомнить.
@angab5791
@angab5791 3 года назад
Классный урок 👍👍👍
@vityurov
@vityurov 3 года назад
Почему не сделали один контроллер UserController в котором бы описали все методы (register, login, logout) ?
@lectoria
@lectoria 3 года назад
Видел разные практики. Кто-то делает название контроллера, исходя из той сущности, с которой он работает. Например UserController. А где-то встречаются практики, когда контроллер называют по тому действию, которое он выполняет. Например RegisteredUserController, AuthUserController и так далее. В итоге для себя не выработал пока четкого правила, как организовывать контроллеры. В одном и том же проекте могу сделать и так, и так. Например, у меня есть проект, где много разных страниц и я изначально назвал контроллеры по той странице, к которой он относится. Например ProfileController, GameController и так далее. Но позже, когда речь зашла о действии пользователя, пришлось сделать доп. контроллер UserActionsController, так как эти действия не относятся четко к какой-либо странице сайта и могут вызываться с разных мест. Но одно могу сказать точно - если я замечаю, что в контроллере образуется много разных (условно говоря, больше 2-3) методов для разных действий, то это верный признак того, что нужно их разносить по отдельным контроллерам. Потому что с ростом сложности, все равно будут добавляться какие-то вспомогательные функции и доп. код. И лучше, чтобы контроллеры были как можно более узко-направленными (отвечающими за как можно меньшее количество действий, в идеале 1 контроллер - 1 действие)
@Hrachik333
@Hrachik333 2 года назад
Кстати я тут заинтересовался с 2FA (двухфакторной аутентификации) в документации промелькнуло про Fortify, но там мало об это написано и не совсем понятно, что делать. Так вот я поискал в интернете и в основном youtube выдает видео из иностраных туториалов и русско говорящих туториалах нет. Может запелить такой ролик? Я думаю многим интересно будет.
@lectoria
@lectoria 2 года назад
Идея хорошая! Определенно запишу себе в список тем
@talgatkulzhanov
@talgatkulzhanov 2 года назад
И еще Артем сделайте пожалуйста видео о ролях юзеров.
@blackmulthumor
@blackmulthumor 3 года назад
Спасибо
@pvm1221
@pvm1221 3 года назад
Спасибо! А можно ли отключить хеширование пароля ? Чтобы всё так же работало только без хеширования или залогиниться без пароля. Я понимаю, что всё можно сделать вручную. Но мне интересно стандарные средства ларавел (такие как Auth фасад) предусматривают такие варианты?
@lectoria
@lectoria 3 года назад
Теоретически можно, если изменить логику провайдера ядра Laravel - AuthServiceProvider и преопределить по итогу сервис 'auth', к которому по итогу обращается фасад Auth и вся внутренняя логика при работе с проверкой пароля. Но, мне этот вариант видится кривым, потому что мы пытаемся изменить логику ядра и это чревато ошибками совместимости с другими сервисами и пакетами, которые рассчитывают на стандартную логику ядра. По мне так лучше просто сделать альтернативное поле для пароля, назвать его, например pwd, и работать с ним так, как душе угодно - хоть с хешированием, хоть без.
@andrei_olekh
@andrei_olekh Год назад
Добрый день! Уроки отличные, спасибо! Вопрос! Создаю свою админку и там раздел работу с пользователями и при редактировании данных пользователя, пытаюсь ему сменить пароль, устанавливаю Hash::make($pass), но после обновлении данных, при попытке войти под новым паролем не проходит авторизация. Подскажите где копать?
@lectoria
@lectoria Год назад
Для начала проверьте, не хешируете ли вы пароль два раза. Сравните хеш на этапе установки с тем, что сохранилось в базу
@andrei_olekh
@andrei_olekh Год назад
@@lectoria Делаю так : $data['password'] = Hash::make($pass); $result = $user->update($data); Да, проверил, данные разные сохраняются. А где тогда второй раз хешируется? Мне получается не надо хешировать?
@lectoria
@lectoria Год назад
@@andrei_olekh Почему конкретно в вашем случае пользователь потом не может авторизоваться, я не знаю. Но я могу посоветовать еще перед сохранением в базу вывести в лог хеш пароля и сравнить его с тем значением, которое потом лежит в базе данных. Если они не совпадают, то значит нужно искать проблему в процессе сохранения (вполне может быть, что в вашему проекте хеширование происходит автоматически и стоит попробовать в $data['password'] положить чистый пароль). Если они совпадают, то значит проблема либо в самом процессе аутентификации, либо вы хешируете пароль не тем алгоритмом, который используется при аутентификации. Это уже нужно смотреть в настройки непосредственно вашего проекта.
@andrei_olekh
@andrei_olekh Год назад
@@lectoria я с помощью dd вывожу значение пароля перед сохранением, в БД ложится совершенно другое значение. Настройки Laravel по хешированию не менял. Мистика..
@andrei_olekh
@andrei_olekh Год назад
Проблема решена! Спасибо за участие!
@ddrdeveloper
@ddrdeveloper 2 года назад
А не противоречит ли стандартам подобное написание логики в контроллере? И помимо выноса ее в роуты или тот же контроллер, куда еще можно или даже, куда НУЖНО разместить эту логику? Можно ли создать для этой логики сервис и туда все вынести или это уже перебор и это чего-то недопонял про сервисы?
@lectoria
@lectoria 2 года назад
А о каких стандартах вы говорите? Сервис класс - это просто способ отделить логику, отвечающую за какой-то определенный пул задач в отдельный класс, доступный из любой точки приложения. Это не обязательно делать, если у вас данная логика встречается в одном месте.
@ddrdeveloper
@ddrdeveloper 2 года назад
@@lectoria Некорректно выразился, я имел ввиду то, что нужно, вроде как, стремиться к тому, чтобы в контроллере должно быть минимум кода и никакой логики
@lectoria
@lectoria 2 года назад
@@ddrdeveloper Согласен, есть такое понятие как "тонкий контроллер", в котором минимум кода. Но, я не всегда так делаю. Я изначально пишу логику в контроллере, чтобы как можно быстрее получить результат, но в голове прокручиваю варианты дальнейшего развития проекта и повторного использования написанного в контроллере кода, и либо сразу решаю вынести эту логику в сервис, либо оставляю ее в контроллере. Зависит от конкретного проекта и случая.
@ZigZagUdachich
@ZigZagUdachich 2 года назад
Почему не показана реализация метода create в модели User. У меня из-за отстутствия такового из контроллера RegisterController прилетает ошибка что якобы поле email не имеет значения по умолчанию.
@lectoria
@lectoria 2 года назад
Очевидно, что если записать в поле email значение, то такая ошибка не возникнет. Проверьте, возможно вы опечатались в названии поля email, либо вовсе не передаете его значение в поля модели при ее создании.
@ZigZagUdachich
@ZigZagUdachich 2 года назад
@@lectoria Благодарю за ответ, да действительно мой косяк: передавал в параметр метода массив validateFields в квадратных скобках. Исправил и всё заработало как часы!
@voltyreylens6730
@voltyreylens6730 2 года назад
Подскажите, делал по вашему видео до конца, при попытке залогиниться с существующими данными в БД вылазит ошибка: "Undefined array key "password""
@lectoria
@lectoria 2 года назад
Проверьте, что у вас поле в форме называется password, проверьте в логике обработки данных от формы, не допустили ли опечатки в названии этого поля. Если опечаток нет, то через функцию dd в коде blade шаблона проверьте, какие данные поступают от формы, есть ли там вообще поле password.
@voltyreylens6730
@voltyreylens6730 2 года назад
@@lectoria Да.. Действительно, в форме инпутов не было name="password".. Протупил :) Спасибо
@lilabd2209
@lilabd2209 2 года назад
спасибо!
@asadaa3095
@asadaa3095 3 года назад
Здравствуйте, регистрация и авторизация многи уже снимали видео но не кто не сделал роли(администратора,пользователь) ,если не трудно сделайте, заранее спасибо
@lectoria
@lectoria 3 года назад
Как раз в контент-плане стоит ближайшая тема про политики и гейты. Они же косвенно отвечают на вопрос ролей при авторизации. В ближайшее время должен разгрузиться от текущих рабочих задач и займусь новыми уроками.
@Hrachik333
@Hrachik333 3 года назад
Есть видео где используется remember_token ?
@lectoria
@lectoria 3 года назад
К сожалению, нет, на эту тему не снимал
@Hrachik333
@Hrachik333 3 года назад
@@lectoria А есть планах?
@lectoria
@lectoria 3 года назад
@@Hrachik333 Да честно говоря, не вижу особого интереса рассказывать про remember_token. Настолько узкая тема. Мне кажется, это будет интересно слишком малому количеству подписчиков.
@donatelodonatelo383
@donatelodonatelo383 2 года назад
что делать, если у меня табличка не стандартная как в стоковом ларавеле, плюс еще нужно получить последний созданный id user чтобы соеденить его с другими полученными в тот момент данными?
@lectoria
@lectoria 2 года назад
Все зависит от того, что именно у вас в этой табличке нестандартно и в чем проблема со стандартной аутентификацией. Чтобы получить последний созданный id до текущего - просто сделайте User::sortby('id', 'desc')->first()->id; (логика, думаю, понятна). А чтобы получить id только что созданного пользователя, то делайте $user->id после того, как пользователь успешно создан.
@primelab8718
@primelab8718 3 года назад
Спасибо за ролик, супер! Вопрос: как можно преобразовать пароль в логин котролере в md5? в моделе User прописал public function setPasswordAttribute($password){ $this->attributes['password'] = md5($password); } и при регистрации он его шифрует, а вот при авторизации пароль который передаётся не шифруется.
@lectoria
@lectoria 3 года назад
Если уж и делаете md5, то добавляйте хотя бы соль к паролю, чтобы усложнить его несанкционированную расшифровку. А вообще, лучше вместо md5($password) делаете обращение к фасаду Hash и к его методу make: Hash::make($password); Чтобы корректно проверять пароль, добавьте в модель User метод checkPassword($password){ return Hash::make($password) === $this->password; } А в логин контроллере вы сначала вынимаете из базы данных пользователя User по email или логину (в зависимости от того, как у вас работает форма авторизации), а затем, если пользователь есть, вызываете у него метод $user->checkPassword($password); Таким образом сможете прочекать, коррректный ли пароль ввел пользователь. PS: Вместо Hash::make вызываете метод md5 (если хотите использовать именно его) PPS: Чтобы вытащить пароль в логин-контроллере, делаете это через $password = $request->post('имя поля с паролем, пришедшее от клиента');
@primelab8718
@primelab8718 3 года назад
@@lectoria Спасибо!
@ddrdeveloper
@ddrdeveloper 2 года назад
Артем здравствуйте, при отправке формы через XHR стандартная валидация выдает ошбку: 422 (Unprocessable Content). Данная ошибка просто выводится в консоли и никак не отлавливается. Как быть?
@lectoria
@lectoria 2 года назад
Скорее всего где-то в процессе валидации данных от формы возникло исключение, которое не было соответствующим образом обработано.
@ddrdeveloper
@ddrdeveloper 2 года назад
@@lectoria Спасибо, уже сам разобрался. Единственное - ошибка 422 (Unprocessable Content) так и выводится в консоль. Мне в сообществе Laravel сказали, что это нормально и ничего с этим не нужно делать. Вы как считаете?
@lectoria
@lectoria 2 года назад
@@ddrdeveloper Ошибки быть не должно. Я считаю, это не нормально ) Я как-то ловил такую ошибку и она была связана с тем, что одно из полей не проходило валидацию, насколько я помню.
@ddrdeveloper
@ddrdeveloper 2 года назад
@@lectoria Да, так и есть, я намеренно допускаю ошибку валидации и это как бы не считается системной ошибкой, но в консоли в любом случае при данной ошибке высвечивается 422 красной строкой. Где я только не искал, у кого только не спрашивал, решил вот у Вас, как у эксперта узнать.
@zellx900
@zellx900 3 года назад
Здраствуйте , у меня есть вопрос - когда я пишу User::create вижу ошибку которая гласит Method 'create' not found in \App\Models\User , с User::where тоже самое , как это исправить ?
@plutuss
@plutuss 3 года назад
App\Models\User::create([ 'name' => 'zellx']) Так пробовали?
@lectoria
@lectoria 3 года назад
Для того, чтобы модель User позволяла использовать метод create, нужно, чтобы класс User наследовался от класса Illuminate\Database\Eloquent\Model. Сам же метод create вообще находится в классе Builder, но это уже другой вопрос )) В общем, чтобы иметь возможность вызова метода create, необходимо наследование от класса Model. Проверьте, является ли класс User наследником этого класса
@даниилкосвинцев
@даниилкосвинцев 3 года назад
@@lectoria Здравствуйте, я проверил, он является наследником, но все равно не работает. Я не очень понял, если метод находится в классе builder, то какое отношение он имеет к абстрактному классу Model? И что мне делать, если я проверил, наследование есть, но метода create он все равно не видит?
@lectoria
@lectoria 3 года назад
@@даниилкосвинцев В Laravel есть такие классы, которые реализуют что-то типа наследования. Вроде как это называется mixin (подмешивание). Одним из таких примеров является класс Illuminate\Database\Eloquent\Model - он явно не наследует класс Builder, но тем не менее имеет возможность использовать его методы. Если откроете исходный код этого класса (Model), то увидите там магический метод __call, который как раз и реализует логику обращения к классу Builder. То есть вы явно не увидите методов класса Builder в подсказках IDE, но тем не менее обращаться к ним можно. Чтобы IDE умела понимать такие подмешивания, рекомендую поставить себе расширение Laravel IDE Helper: github.com/barryvdh/laravel-ide-helper www.jetbrains.com/help/phpstorm/laravel.html С помощью него разработка станет куда проще. Осталось только разобраться, почему у вас не работает метод create. 1. Убедитесь, что там, где вы хотите вызывать метод create, вы используете именно класс \App\Models\User 2. Проверьте, какой класс наследует ваш класс \App\Models\User (там должен быть либо Illuminate\Foundation\Auth\User, либо Illuminate\Database\Eloquent\Model). 3. Если там Illuminate\Foundation\Auth\User - то проверьте, не вносили ли вы случайно какие-то исправления в файл vendor/laravel/framework/src/Illuminate/Foundation/Auth/User.php) 4. Если там Illuminate\Database\Eloquent\Model, то проверьте, не вносили ли вы какие-либо исправления в файл vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php 5. Если ответы на 3 и 4 - "Нет", то все должно работать. Если не работает, то я предлагаю просто состыковаться в телеграме, чтобы посмотреть скриншоты, а может и по тимвьюверу сконнектиться и разобраться, в чем дело. Телега: t.me/artprog
@даниилкосвинцев
@даниилкосвинцев 3 года назад
@@lectoria Спасибо большое за ответ! Никогда ещё мне так подробно не отвечали, очень приятно что вы так вовлечены в общение со зрителями! Я сегодня попробую пройтись по вашим пунктам, надеюсь у меня все получится)) ещё раз спасибо) с меня лайк, подписка и вечная любовь)
@blenda602
@blenda602 3 года назад
Здравствуйте, подскажите пожалуйста что я делаю не так. При попытке регистрации нового пользователя выскакиевает ошибка SQLSTATE[HY000]: General error: 1364 Field 'name' doesn't have a default value (HY000) Не могу понять причем тут поле 'name' ?
@lectoria
@lectoria 3 года назад
Откройте таблицу, в которой хранятся пользователи в базе данных и посмотрите на поле name. Скорее всего у него стоит NOT NULL и не указано значение по-умолчанию. Поэтому при регистрации, не заполняя это поле, вы получаете ошибку базы данных.
@blackmulthumor
@blackmulthumor 3 года назад
С какой версией ларавел вы работаете?
@lectoria
@lectoria 3 года назад
Laravel 8
@karidzava7340
@karidzava7340 Год назад
у меня подключение css только так заработало у тебя в видео вот так в чем разница? что такое asset?
@lectoria
@lectoria Год назад
asset - это вспомогательная функция для формирования полного URL к ресурсам. Вот здесь можно посмотреть поподробнее, о чем это: laravel.com/docs/10.x/helpers#method-asset
@karidzava7340
@karidzava7340 Год назад
@@lectoria спасибо
@SiegeMechanic
@SiegeMechanic 2 года назад
уже существующим пользователем не могу залогиниться. что бы не писал - вылазит ошибка прописанная в LoginController. вроде уже несколько раз сверил код. не понимаю,в чем может быть проблема. видимо,не вытягивает с бд 'email' 'password' ?
@lectoria
@lectoria 2 года назад
Причины могут быть разные, но одна из распространенных - это сохранение пароля в базу без хеширования. Проверьте, не лежит ли пароль в базе в чистом виде. Если так, то вам нужно при регистрации пользователя хешировать пароль (по-моему, если память не изменяет, это делается через фасад Hash)
@SiegeMechanic
@SiegeMechanic 2 года назад
@@lectoria так и оказалось. спасибо. не понял,только,почему так происходит? неужели ларавель принуждает к хешированию?
@lectoria
@lectoria 2 года назад
@@SiegeMechanic Потому что вы при регистрации сохранили пароль в чистом виде, а нужно сохранять в хешированном. Ларавель по-умолчанию при проверке пароля сравнивает хеш введенного пароля с тем значением, что лежит в базе данных. Это логика по-умолчанию. Если вы хотите хранить в открытом виде (хотя так делать не стоит), то вы можете переопределить эту логику путем переопределения стандартной логики проверки хеша пароля, которая лежит в методе "validateCredentials" в классе: vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php Можете просто сделать свой провайдер пользователей, расширенный от Eloquent-провайдера, и в нем делать свою проверку пользовательских реквизитов на валидность.
@SiegeMechanic
@SiegeMechanic 2 года назад
@@lectoria Спасибо. Логика ясна теперь
@faketeam460
@faketeam460 3 года назад
Не знаю почему, но у меня проблема с методом group() Argument 1 passed to Illuminate\Routing\Router::group() must be of the type array, string given, called in W:\domains\laravel2\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php on line 261 Эта ошибка появляется, когда я оставляю group() метод. Подскажите как решить, пожалуйста
@lectoria
@lectoria 3 года назад
По такой информации трудно сказать. Нужно бы посмотреть на ваши маршруты. Сначала локализуйте, в каком именно месте описания маршрутов (web.php или api.php, на какой строчке кода) у вас возникает эта проблема. Это можно найти, если поочередно закомментировать отдельные участки маршрутов, и когда ошибка исчезнет, найти то место, которое вы только что закомментировали. Затем покажите, что у вас там за код, возможно, где-то ошиблись в аргументах.
@faketeam460
@faketeam460 3 года назад
@@lectoria Это в web.php. Я делал всё как в видео и ошибка именно в group. Можно как-нибудь по-другому написать передачу маршрутов?
@lectoria
@lectoria 3 года назад
@@faketeam460 Да, можно без group каждый маршрут прописать отдельно, задав им имена с 'user.' спереди.
@faketeam460
@faketeam460 3 года назад
@@lectoria Спасибо
@DarkKillsCnnanel
@DarkKillsCnnanel Год назад
При нажатии регистрации, страница просто обновляется, не выдав ни одну ошибку.
@lectoria
@lectoria Год назад
А в логах laravel какая-нибудь ошибка есть? Или может быть в логах ошибок php? Просто если все сделать четко по инструкции, то никаких ошибок быть не должно.
@softscrypt3641
@softscrypt3641 Год назад
в 10 Laravel актуально ?
@lectoria
@lectoria Год назад
Не проверял. Но в целом не думаю, что в Laravel 10 существенно изменился принцип.
@sergeylipuringa7145
@sergeylipuringa7145 3 года назад
Здравствуйте... данная конструкция Auth::attempt( $formFields) выдает false... в чем может быть проблема... пробовал также так: $formFields = [ 'email'=>$request->input('email'), 'password'=>Hash::make($request->input('password')) ];
@lectoria
@lectoria 3 года назад
Если Auth::attempt выдает false, то вероятнее всего, вы неверно вводите логин или пароль. Если же вы на 100% уверены, что логин и пароль верный, то смотрите в настройки config/auth.php, что там у вас за guard и providers. Еще рекомендую заглянуть в БД и посмотреть, хешируется ли пароль при сохранении.
@sergeylipuringa7145
@sergeylipuringa7145 3 года назад
@@lectoria спасибо за ответ! В том то и дело, что испробованы многие варианты, и с хешем и без (регистрация), в бд все корректно.... через dd проверка входных данных... логин/пасс через ручной ввод и copy paste в итоге все работает, кроме Auth::attempt... Видимо частный случай... будем разбираться... вам огромное спасибо интересные за уроки! С нетерпениеи ждем новых!
@SiegeMechanic
@SiegeMechanic 2 года назад
@@lectoriaчто именно должно быть в guard и providers?
@lectoria
@lectoria 2 года назад
@@SiegeMechanic В guards прописываются ключи и настройки отдельных гвардов. Например: 'guards' => ['web' => [ 'driver' => 'session', 'provider' => 'users', ], ], А в providers, соответственно, указываются источники данных для сравнения с проверяемыми данными. Например, пользователи могут храниться как в базе, так и вообще на другом сайте. Пример, когда пользователи являются Eloquent моделями: 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], ],
@szed8135
@szed8135 4 года назад
22:43 А что за описание класса Controller? У меня нет папки Web в app.
@lectoria
@lectoria 4 года назад
При установке через laravel new projectname, в папке app также лежит папка Web, внутри которой есть набор базовых классов, которые унаследованы от еще более базовых. В том числе там должен лежать файл Controller/Controller.php, внутри которого должен быть подобный код (см. ниже). Если его там нет, то можно унаследоваться от класса: Illuminate\Routing\Controller
@szed8135
@szed8135 4 года назад
​@@lectoria Ясно, буду пробовать, но я убирал эту строку с use и у меня вроде все работает все так, же как в видео. Так что не знаю, нужно ли создавать еще и этот файл. В самом коде унаследуется класс Controller. А сам класс Controller лежит в этой же папке и он почти такой же как вы прислали, за исключением того, что нет методов index и internalPage и так же унаследуется от BaseController.
@lectoria
@lectoria 4 года назад
@@szed8135 На самом деле, можно наследоваться и от базового класса Illuminate\Http\Controller, так как в папке Web лежит скорее пример кастомного контроллера, он по функционалу не сильно отличается от базового.
@SiegeMechanic
@SiegeMechanic 2 года назад
@@lectoria попробовал заменить на use Illuminate\Http\Controller; и получаю теперь Error Class 'Illuminate\Http\Controller\Controller' not found
@lectoria
@lectoria 2 года назад
@@SiegeMechanic Да, это я опечатался. Я имел ввиду Illuminate\Routing\Controller
@Sapsonbz
@Sapsonbz 3 года назад
Подскажите при стандартной аутентификации как делать проверку на совпадения (34:23 минута)
@lectoria
@lectoria 3 года назад
На 34:23 речь идет о проверке совпадений на существование пользователя в базе, если происходит попытка зарегистрировать пользователя с таким же email. Не совсем понял, о проверке на какие совпадения идет речь при аутентификации. Уточните?
@Sapsonbz
@Sapsonbz 3 года назад
@@lectoria у меня у модели User нет метода where. Я просто не создавал сам таблицу, а пользуюсь встроенной аутентификацией
@lectoria
@lectoria 3 года назад
@@Sapsonbz В смысле, вы его не видите в коде или при попытке его вызова возникает ошибка, что данного метода нет? Если вы их не видите в коде, то это нормально, потому что в классах Eloquent используется немного альтернативный способ, что-то вроде наследования, но фактически это просто проброс вызова в другой класс (в частности класс Builder) Если же возникает именно ошибка, что данного метода нет в классе User, значит ваш класс User не наследуется от класса Eloquent\Model. По какой причине он у вас не наследуется - другой вопрос. ))
@Sapsonbz
@Sapsonbz 3 года назад
@@lectoria Ну у меня ошибок нет. код выполняется, только без уведомления что такой пользователь найден в системе
@lectoria
@lectoria 3 года назад
@@Sapsonbz Ну то есть получается, что вызов метода where работает, просто не так, как вы ожидаете? В этом случае я рекомендую проверить вообще, вызывается ли ваш контроллер и связана ли ваша модель с конкретной таблицей в базе. Для этих целей можно поставить какие-нибудь тригеры в коде, по которым вы сможете понять, выполнен ли данный код или нет. Это может быть, например throw new Exception("Этот код выполнился");
@Hrachik333
@Hrachik333 2 года назад
а как насчет проверки почти, валидация email
@lectoria
@lectoria 2 года назад
Перефразируйте вопрос, не понял вас.
@Hrachik333
@Hrachik333 2 года назад
@@lectoria После регистрации отправить на почту ссылку для проверки существование почты или отправить с генерируемый пароль чтобы потом он мог поменять его. Одним словом каким образом отправить почту с определенными данными. Я видел что у ларавел 8 есть верификация почты.
@lectoria
@lectoria 2 года назад
@@Hrachik333 Если ваша модель User наследует класс Illuminate\Foundation\Auth\User (а по-умолчанию в Laravel именно так), то при регистрации пользователя происходит отправка письма для подтверждения почты при помощи метода sendEmailVerificationNotification в трейте Illuminate\Auth\Notifications\VerifyEmail\MustVerifyEmail. Можете просто заглянуть в исходный код, чтобы просто понять логику, как это работает. Также вы можете расширить класс User и описать свою логику отправки соответствующих писем с необходимыми данными. Процесс отправки писем хорошо описан в документации: laravel.com/docs/8.x/mail. У меня ролика на эту тему пока нет, так как это отдельный вопрос и в рамках одного ролика про аутентификацию это уже много информации
@Hrachik333
@Hrachik333 2 года назад
@@lectoria спасибо посмотрю, может разберюсь
@blackmulthumor
@blackmulthumor 3 года назад
А как отображать на странице данные авторизованного пользователя? Допустим, он зашел на страницу своего аккаунта и там должна отображаться информация о нем. Как ее отобразить?
@lectoria
@lectoria 3 года назад
Через фасад Auth можно обратиться к методу user, который возвращает текущего аутентифицированного пользователя. Ну и далее можно обращаться к его полям, например name, email, и так далее. Если говорить про blade, то там это будет выглядеть например так: {{ Auth::user()->email }}
@blackmulthumor
@blackmulthumor 3 года назад
@@lectoria Да, уже посмотрел в документации, спасибо
@karidzava7340
@karidzava7340 Год назад
почему не показал css?
@lectoria
@lectoria Год назад
Это лишнее
@karidzava7340
@karidzava7340 Год назад
у меня подключение css только так заработало у тебя в видео вот так в чем разница? что такое asset?
@ДмитрийСайтотворец
Auth::login вызвращает: ERROR: Illuminate\Auth\SessionGuard::login(): Argument #1 ($user) must be of type Illuminate\Contracts\Auth\Authenticatable, App\Models\User given
@lectoria
@lectoria 2 года назад
Для того, чтобы такого не возникало, модель User, которая лежит у вас в папке app/Models/ должна реализовывать интерфейс Illuminate\Contracts\Auth\Authenticatable Добавьте в начале: use Illuminate\Foundation\Auth\User as Authenticatable; А саму декларацию класса измените на: class User extends Authenticatable Класс Illuminate\Foundation\Auth\User реализует все необходимые для аутентификации методы и вообще по-умолчанию, при установке Laravel модель User уже должна содержать эти записи. Возможно, вы как-то иначе устанавливали Laravel.
@NikoLazo
@NikoLazo 3 года назад
увеличь пжл немного шрифт. мне плохо видно
@lectoria
@lectoria 3 года назад
Обязательно учту этот момент в новых видео-роликах. Пока таких просьб, как ваша мало, но все равно, в следующем ролике сделаю покрупнее шрифт, чтобы было комфортно смотреть на маленьких экранах.
@NikoLazo
@NikoLazo 3 года назад
@@lectoria спасибо. уроки отличные
@СтаниславСамойленко-г6п
непонятно, когды ты css творил...., с сережины фильма как будто начал
@Ume_Sadkv
@Ume_Sadkv 2 года назад
"syntax error, unexpected 'user' (T_STRING), expecting ',' or ')' (View: D:\OpenServer\domains\myproject esources\views\login.blade.php)" не выдает страничку с формой что делать?
@lectoria
@lectoria 2 года назад
У вас синтаксическая ошибка в коде
@paparimskiy1557
@paparimskiy1557 2 года назад
Подскажите, а почему у меня не работают @error @enderror
@lectoria
@lectoria 2 года назад
Проверьте названия полей. В тег @error нужно передавать имя поля. Например @error('email') {{$message}} @enderror А также провеьте, валидируете ли вы вообще значения обрабатываемых полей.
Далее
Laravel. Шаблонизатор Blade. Часть 1
51:11
Will A Basketball Boat Hold My Weight?
00:30
Просмотров 18 млн
BRUTAL STREET FIGHT KNOCK OUT
00:20
Просмотров 1,4 млн
Dragon Blood Whitening Cream
00:35
Просмотров 6 млн
WS МИТАП №4: QA
2:11:06
Просмотров 2,5 тыс.
Will A Basketball Boat Hold My Weight?
00:30
Просмотров 18 млн