Laravel создание Блога 28. Отправление письма с подтверждением учетной записи Email verification
HTML-код
- Опубликовано: 7 сен 2024
- Стань спонсором(бусти аккаунт), доступ к собеседованиям:
boosty.to/lara...
Мои платные курсы:
laravelcreativ...
План развития с нуля до middle+:
laravelcreativ...
Группа вк:
laravel...
- Ссылка для донатов, спонсорства, пожертвований
yoomoney.ru/to...
www.donational...
- -
. ---
В этом видео реализуем отправку письма для подтверждения учетной записи, как для зарегистрированных пользователей, так и для созданных в админке
Это была битва не на жизнь, а на смерть. Делаю на Laravel 10. Всё получилось. Просидел 2 часа с этим 5-минутным видосом))
За урок большое спасибо!
Видео отличное, в плане обучения. Но, не завидую тем, кто будет это делать на Ларавеле 11-12)
@@furious9398 на 11 версии нормально)
Друг! искренне хочу поблагодарить тебя за то что ты делаешь! Спасибо!
Всегда пожалуйста!) Спасибо большое!:)
Спасибо, за урок! Очень крутая и простая подача материала! Лучший курс по Laravel в разрезе создания блога! Совместно с "базовыми курсами" от автора - вообще ТОП! Автор огромная тебе благодарность и низкий поклон за труды.
Благодарю, спасибо большое)!)!
Спасибо, как всегда полезно
Благодарю!)
Благодарю за урок
Поддерживаю, спасибо !
Благодарю!)
спасибо большое
У кого ошибка mb_strcut(). Установите модуль sudo apt-get install php-mbstring и перезайдите в систему.
камент для продвижения
Автор! В целом уроки полезные, но много неточностей, которые порождают непонятные проблемы. В частности не упомянута установка laravel/ui, после строчки добавки event должно следовать Auth::login($user); и т.д. и т.п. Повнимательней к деталям!
если создавать пользователя через стандартный register, то мускул выдаст ошибку, т.к. не будет присвоена роль. можно добавить после с дефолтным значением роли в registercontroller метод create, но админа делать дефолтным при регистрации это глупо, по дефолту надо ставить роль читателя, соответственно руты админа мы уже доступа иметь не будем. чтобы все заработало как надо придется нормально так порефакторить, в т.ч. шаблоны блейда.
Здесь правильнее было бы в роутах сначала делать проверку 'verified' перед админом. Потому что страницу может запустить Читатель, и тогда сообщение MustVerify он не увидит.
Мой вариант:
'middleware'=>['auth', 'verified', 'admin_mdl']
тогда читатель увидит, что есть какая-то страница /admin, а ему туда не надо пробовать заходить, а так сразу 404 и все, пусть идет на главную
Спасибо за урок
Только верификация не срабатывает...
Письмо есть, после нажатия перекидывает на /login и в базе в поле email_verified_at по прежнему null
как-то решили проблему?
@@dimongeneral еще нет
@@dimongeneral видимо, проблема была в Laravel 9 т.к. оказалось, что она не LTS и перестала ставиться по умолчанию.
А по новой начал учиться, поставилась 8-я версия и все нормально проходит и срабатывает
@@luckyalexandr на восьмёрке как? Решил проблему? Тоже мучаюсь с этим же.
у меня вопрос, а что если пользователь прервал регистрацию и не подтвердил почту. он так и останется в бд? я хочу сделать регистрацию только после подтверждения почты, но отправка письма возможна только после создания пользователя
Да нихрена мы с задачей не справились.
Symfony \ Component \ Mailer \ Exception \ TransportException
Connection to "process /usr/sbin/sendmail -bs" has been closed unexpectedly
письмо перестало приходить. а при попытке повторно выслать пишет вот такое. И всё. тупик.
Не работает несколько миддлверов. 'middleware' => ['auth', 'admin', 'verified'] с такой ситуацией пропускает всех, лишь бы был авторизован. Т.е. работает первый миддл. Если поменять местами, например ['admin', 'auth', 'verified'], тогда админ миделваер работает. Несколько мидлов работает только на один роут, например Route::get(//////////)->middleware([1,2,3]). При Route::group(/////)->middleware([1,2,3]) так не работает. Да и вообще про Роут::групп в документании ни слова. Как о нём узнали вообще? Случайно кто-то набрал, и понял, что оно работает? Вот почему не описать в доке это? И поэтому разработка является не придумыванием чего-то нового и интересного, а поиском и придумыванием того, что уже есть.
В общем работает если прописать вот так
Route::middleware(['auth', 'admin', 'verified'])->group(function () {
Route::group(['prefix' => 'admin'], function () {
Route::get('/', AdminIndex::class);
Route::get('/create', AdminCreate::class);
//////////////
//////////////
});
});
Благодарю!)
Хм, этот комментарий следовало бы закрепить.
Добрый день! А как вообще сайт понимает что по ссылке перешёл именно тот пользователь и вообще откуда он понимает что был переход по ссылке. Интересен сам механизм. Ведь одно дело отрпавлять данные через форму на определённый скрипт где тот в зависимости от полученных значений, заранее оговорёных полей, выполняет те или иные действия. Это в случае с методом пост. С гетом ещё проще все параметры видны непосредственно в адресе после амперсанда. Это всё предельно понятно. А вот как на самом деле происходит с сылкой? Она ведь и полей никаких не передаёт и параметров у неё нет после амперсанда, да и самого амперсанда тоже может и не быть. Это первый момент. И второй момент вытекающий из первого, как получается что сначало когда перенаправление было на home переход по ссылке вернул 404 страницу т.к. страницы home - не существует, а когда целевая страница была заменена на "\", то повторный переход по той же ссылке вернул уже главную страницу? Ведь текст ссылки не менялся, да и не мог измениться так как ссылка находилась в письме которое уже было доставлено и следовательно никак не могло измениться.
в сессии хранится информация о текущем пользователе, кто авторизован.
Когда переходишь по ссылку на верификацию майла, то там гет параметр, это хэш наверное какой-то пользователя (например почта), потому что поля verify_hash в таблице user нет. И получается ты переходишь по этой ссылке, ларавел извлекает пользователя из этого хэша(который в ссылке), смотрит что в данный момент пользователь уже авторизован и этот авторизованный пользователь не совпадает с тем, кого извлекли из хэша в ссылке
Надеюсь более менее нормально объяснил)
Помимо 'middleware' => ['auth', 'admin', 'verified'] еще добавил имплемент. Заработало
--------
Does the user you're testing have a null email_verified_at field in the database?
Have you added implements MustVerifyEmail within the user model?
class User extends Authenticatable implements MustVerifyEmail
Did you set verify to true in your routes/web.php?
Auth::routes(['verify' => true]);
You've added the middleware properly to the routes, so that isn't the issue.
Other than that we don't have much information to go off.
Добрый день! Почему-то вместо verify прилетает "Ваш пароль" с прошлого урока
2:37 перекидывает на страницу /login, вместо /home и не появляется запись в таблице users в столбце email_verified_at
Так, а код ошибки или что-то такое есть?)
Доброго времени суток! Та же проблема! При подтверждении пользователя через письмо - email_verified_at остается Null, перекидывает на страницу /login. Ошибки не выдает. Есть какие-либо мысли по данному поводу? Заранее спасибо!
@@theonlyway4732 вы решили как-то эту проблему?
спасибо за годный контент!
такая проблемсссс...
прописал Auth::routes(['verify' => true]); и 'middleware' => ['auth', 'admin', 'verified']
и не редиректит, как пускал на страницы так и пускает, но в route:list отображается, что попасть может только подтвержденный юзер, хз как быть и что делать...
А ты юзером заходишь?) Или как?
нашел ответ?
а где менять дизайн письма со ссылкой активации?
Пропиши эту команду php artisan vendor:publish --tag=laravel-mail
И у тебя появится в resources папка vendor а в ней mail, и там письмо разбито на части(кнопка, текст и т.д.). Вносишь изменения и всё.
@@laravelcreative Благодарю!)))
Route [verification.verify] not defined. выдает такую ошибку. что может быть?
пользователь регистрируется, но письмо о подтверждении не приходит
Auth::routes(['verify' => true]);
Вот это надо добавить
@@laravelcreative оно добавлено было, пока я убрал верификацию
Хм. так сложно сказать, надо видеть код, что-то упущено
@@laravelcreative как сделать просмотр постов через личный кабинет пользователя, через комментарии, т.е ссылаться на тот пост на котором оставил комент
Нужно прописывать релейшны. У каждого комментария есть пост. Соответственно, через релейшн вытягивать айдишник поста, вызывать по имени роут "одиночного" поста и туда вкладывать этот айдишник. СОбственно всё:)