Паспорт нод: Паспорт НОД по художественно – зстетическому развитию “Золотая Осень” в старшей группе.
Паспорт НОД по художественно – зстетическому развитию “Золотая Осень” в старшей группе.
МУНИЦИПАЛЬНОЕ БЮДЖЕТНОЕ ДОШКОЛЬНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
«Детский сад общеразвивающего вида № 50»
НОД
«Золотая Осень»
в старшей группе
(художественно-эстетическое развитие)
Воспитатель 1 категории:
Сакина И.В.
Иваново, 2017г.
2. Нетрадиционное, интегрированное, комплексное.
Предмет: Художественно эстетическое развитие (лепка)
Номер занятия по данной теме, место занятия в изучении темы: №1 , на этом занятии закрепляется умение лепить грибы, и происходит обогащение словарного запаса детей
Цель занятия: закреплять умение лепить предметы или их части круглой, овальной, дискообразной формы, пользуясь движением всей кисти и пальцев; учить передавать некоторые характерные признаки: углубление, загнутые края (шляпка грибов), утолщающиеся ножки; развивать координацию речи с движением, творческое воображение, закрепить в речи глагол «искать» , имена прилагательные «проливной», «кленовый».
Задачи занятия:
Познавательное развитие:
– развивать интерес, любознательность и познавательную мотивацию;
– развивать умственную и творческую активность;
– продолжить вызывать интерес к познанию окружающего мира, обогатить знания детей об осеннем времени года.
Речевое развитие
-обогащать и активизировать словарный запас детей;
-побуждать детей использовать в своей речи прилагательные, глаголы и наречия;
– продолжать учить детей отвечать на вопросы полным предложением;
– выразительно читать стихотворения.
Физическое развитие
-развивать мелкую моторику кистей рук.
Социально-коммуникативное развитие
– прививать любовь к природе;
Художественно-эстетическое развитие:
– повысить уровень навыков детей в лепке разными способами, побуждать передавать характерные особенности грибов при лепке.
-наборы пластилина по количеству детей,
– доски для лепки по количеству детей,
-магнитная доска,
-интерактивная доска,
– презентация на тему «Любимая Осень»,
– развивающий мультфильм «Уроки тётушки Совы «Про грибы»»
-магнитофон,
-плакаты,
– аудиозаписи.
Предварительная работа: знакомство с различными приемами лепки, заучивание стихотворений об осени и грибах, рассматривание картин на осеннюю тематику, повторение физкультминутки, рассматривание иллюстраций, картинок, фото грибов, осеннего леса.
Ход занятия.
Деятельность педагога с указанием номера слайдаДеятельность воспитанника
Этап занятия.
Вхождение 5 минут
Цель этапа: включение каждого дошкольника в деятельность, создание благоприятной атмосферы на занятии.
Стимуляция интереса и эмоциональный настрой.
Цель этапа: Организация и настрой на занятие.
(Звучит музыка, дети заходят в зал встают полукругом) Звучит фонограмма вальса из к/ф «Мой ласковый и нежный зверь».
ИКТ ролик на тему осень.Воспитатель: Ребята, здравствуйте.
На улице сейчас осенний период года, это время всегда нравилось поэтам, художникам. А вам нравится осень?
– Как вы думаете, а какое настроение у осени?
Правильно, оно может быть разным и задумчивым, и нежным, и радостным. Но особенно красив осенний лес.
Воспитатель: Давайте встанем все в круг, друг другу улыбнёмся. Пусть сегодняшней осенний день будет радостным и веселым.
Давайте подуем на листочки с ладошки.
Слайд № 3, Слайд № 4
Воспитатель: Давайте присядем на стульчики и попробуем оказаться в осеннем лесу. Закройте глазки. Представьте лес, в котором тепло и солнечно, как летом. Послушайте, как ветер качает листочки. Вот солнечный зайчик играет с нами в прятки. Здесь замечательно и тихо.
Воспитатель: Представили?
А теперь откройте глазки.
Вам понравилось в этом лесу?
А грибочки там были?
Здравствуйте!
Ответы детей.
Ответы детей.
Движения детей.
Ответы детей.
Ответы детей.
Этап занятия.
Основной. 15 минут
Цель этапа: – в процессе включения воспитанников в активную познавательную деятельность через использование различных педагогических технологий воспроизвести необходимые для овладения новым материалом знания детей;
-активное мотивирование на новый материал;
– развитие речи, как интеллектуального и общего развития воспитанника через представление собственных знаний;
– развитие эмоциональной сферы воспитанников через применение активных форм ведения занятия.
Объяснение нового материала.
Методы организации работы:
– мозговой штурм;
– развивающая подвижная игра;
-наблюдение;
– лепка.
Цель этапа:
Воспитанники актуализируют знания, отвечают на вопросы, обобщают, творят.
Воспитатель: Давайте ещё раз повторим признаки осени. Игра с мячом малой подвижности.
Я буду кидать вам мяч, а вы ловить его и обратно будете мне бросать при этом говорить признаки осени.
Воспитатель: Молодцы!
Художественное слово:
Осень
Падают, падают листья –
Желтые, красные листья
По ветру вьются, летят.
Птицы на юг улетают –
Гуси, грачи, журавли.
Вот уж последняя стая
Крыльями машет вдали.
В руки возьмем по корзинке,
В лес за грибами пойдем,
Пахнут пеньки и тропинки
Вкусным осенним грибом.
Слайд № 5
Воспитатель:
Физкультминутка:
Все зверушки на опушкеИщут грузди и волнушки.
Белочки скакали.
Рыжики искали.
Лисичка бежала
Лисички собирала.
Скакали зайчатки
Искали опятки.
Медведь проходил
Мухомор раздавил.
Слайд № 6
Воспитатель: Молодцы!
Воспитатель: Ребята, вы сейчас замечательно показали, как грибы собирать можно! А давайте попробуем их слепить?
Какие названия грибов вы знаете?
Воспитатель: Ребята сейчас я вам расскажу о съедобных и не съедобных грибах.
БЕЛЫЙ ГРИБ — шляпка коричневая, круглая, ножка толстая.
В глухом бору стоять привык
Белый гриб растёт под ёлкой
Любит прелые иголки.
Загляни под ёлку смело
Там растёт грибочек белый
Крепок, вкусен и пригож
Царь грибов собой хорош
На толстой крепкой ножке я.
Найти попробуйте меня.
ПОДБЕРЕЗОВИК — растет в основном под березой, шляпка круглая, ножка тонкая, высокая, шляпка темно-коричневого цвета.
Под берёзкой у дорожки
Кто стоит на крепкой ножке?
Он, в коричневом берете,
Самый вкусный гриб на свете.
Подберёзовик – крепыш.
Соберём его малыш.
ПОДОСИНОВИК — с красной шляпой, ножка высокая.
Под осинкой притаился,
Жёлтым листиком накрылся
Гриб на крепкой ножке серой,
В красной шляпке, загорелый.
Подосиновик-малыш.
Право, славненький, крепыш.
МУХОМОР — самый распространенный ядовитый гриб. Ножка длинная, есть белый воротничок. Шляпка красная, круглая, в белую крапинку.
Смотрит заинька в упор
Вот так чудо мухомор!
С красной шляпкой,
С белой ножкой.
У гриба красивый вид,
Только жалко-ядовит!
Слайд № 7 и 8
Воспитатель: Предлагаю вам слепить сои замечательные грибы! А какой а вас будет гриб, решайте сами!
Слайд № 9 и 10
Воспитатель: Ребята, посмотрите ещё раз на грибы. Давайте повторим, из каких частей они состоят.
Чем они похожи?
Воспитатель: Правильно ребята. Грибы различаются цветом и формой шляпки. Теперь давайте, слепим грибочки.
Воспитатель: Первым делом мы слепим ножку. Для этого нам надо скатать в столбик пластилин выбранного вами цвета, получится ножка у грибочка.
Воспитатель: Давайте сделаем перерыв и разомнём пальчики.
Пальчиковая гимнастика «Грибы»
Раз, два, три, четыре, пять! «Шагают» пальчиками по столу.
Мы идем грибы искать.
Этот пальчик в лес пошел, Загибают по одному пальчику,
Этот пальчик гриб нашел, начиная с мизинца.
Этот пальчик чистить стал,
Этот пальчик жарить стал,
Этот пальчик все съел,
Оттого и потолстел.
Воспитатель: Отдохнули? Давайте продолжим. Возьмём пластилин нужного вам цвета для шляпки. Скатать в шар и сплющить его между ладонями – получится шляпка для гриба. Теперь соединяем ножку с шляпкой, сглаживаем их между собой. Вот ребята, получились у нас грибы. Давайте выставим их на нашу полянку.
Ответы детей.
Дети идут в хороводе.
Скачут в присядке, изображая белочек.
Скачут стоя.
Идут, изображая медведя.
Ответы детей.
Ответы детей.
Движения детей.
Этап занятия.
Заключительный. Рефлексия. 5 минут
Цель этапа: подведение итогов занятия, построив траекторию дальнейшей работы по освоению новой темы для каждого воспитанника.
Цель этапа:
выполняя творческое задание, расширить собственные знания по данной теме, научиться выражать свое мнение.
в ходе проведения рефлексии определить уровень собственных достижений, знаний и затруднений по изучаемой теме.
Анализ занятия:
– Что нового вы сегодня узнали?
– Что вам больше всего понравилось?
– Какие названия грибов вы запомнили?
Все сегодня молодцы. Наше занятие закончилось, но вас ждёт сюрприз –
Осень решила вам подарить вот такие цветные карандаши, чтоб вы смогли нарисовать её портрет!
На этом наше занятие подошло к концу. Спасибо, можете быть свободны.
Ответы детей.
Список литературы
Примерная общеобразовательная программа «От рождения до школы» авторы Н. Е.Веракса, Т. С. Комарова, М.А. Васильева. Комплексные занятия. Старшая группа.
Л.И. Пензулаева. «Планы и конспекты занятий. Оздоровительная гимнастика для детей 3-7 лет».
Л.И. Пензулаева. «Физическая культура в детском саду» Старшая группа.
Комплексно-тематическое планирование по программе «От рождения до школы» под ред. Н.Е. Вераксы. Подготовительная группа.
5. Комплексное планирование. Старшая группа. (под ред. М.А. Васильевой).
6. Н.С. Голицына Перспективное планирование в детском саду. Старшая группа. Реализация ФГТ ДОУ (2 части).
7. http://www.maam.ru – международный образовательный портал
8. http://dovosp.ru/ – журнал «Дошкольное воспитание»
9. https://yandex. ru – картинки по лепке грибов старшем дошкольном возрасте, картинки с изображением осеннего времени года.
10. http://vospitalo4ka.ru/ – сайт «Воспиталочка»
11. http://nsportal.ru/ – социальная сеть работников образования nsportal.ru
12. http://ya-odarennost.ru/ – сайт «Одарённость.RU».
13. http://pedsovet.su/load/411 – презентации шаблоны.
14. http://ped-kopilka.ru/vospitateljam/zanjatija-s-detmi/konspekt-zanjatija-v-podgotovitelnoi-grupe-dou-po-teme-bogatyri-zemli-ruskoi.html – учебно – методидический кабинет.
Конспект паспорта проекта НОД “Моя Родина
Паспорт проекта
«Моя Родина – Россия»
Воспитатель 1 категории:
Гафурова Е.А.
Актуальность:
Формирование патриотических чувств детей, которые выражаются в соответствующих поступках и поведении – уважительном отношении к русским национальным героям, в стремлении быть похожими на них.
Цель:
Способствовать развитию духовно-нравственной личности с активной жизненной позицией и творческим потенциалом, способной к самосовершенствованию и гармоничному взаимодействию с другими людьми.
Задачи:
Расширение представления детей о национальных праздниках.
Воспитание любви и уважения к русским национальным героям.
Развитие умений детей в продуктивной деятельности.
Участники проекта: Воспитатель, дети, родители.
Вид проекта: Комплексный, творческий.
Срок реализации проекта: 1 неделя (краткосрочный)
Подготовка к внедрению проекта:
Подобрать методическую, художественную, детскую литературу; иллюстративные материалы; дидактические игры; изображение символики России.
Оформить уголок для родителей о проведении проекта: «Моя Родина – Россия»
Составить перспективный план мероприятий.
Создание условий для самостоятельной деятельности: военная атрибутика, подборка открыток.
Продукт проекта: Выставка рисунков по теме, создание копилки познавательной информации.
Межпредметные связи
Образовательные области
Вид
деятельности
Содержание
деятельности
Коммуникация
Познавательная
Беседа с детьми об истории праздника: «День народного единства».
Свободное общение: «Кто такие Минин и Пожарский?»
«Что означает – народное единство?»
Познание
Познавательная
Рассказ воспитателя: «Начало смутного времени», «Народное единство», «памятник Минину и Пожарскому».
Рассматривание фото, иллюстраций.
Конструирование: «Старинная крепость», «Кремль».
Художественная литература
Читательская
Писатели и поэты о празднике.
Чтение стихов, пословиц, слушание музыки.
Социализация
Познавательная
Посещение воинской части, смотр боевой техники.
Художественное творчество
Творческая
Аппликация «Флаг России».
Безопасность
Познавательная
Безопасность нашей страны, государства:
– беседа, рассказ;
– рассматривание фото, иллюстраций.
Музыка
Музыкальная
Слушание:
Струве «Моя Россия»,
«Торжественный марш»,
«Гимн России».
Физическая культура
Активная физическая деятельность
«Сильные, смелые, ловкие» – утренняя гимнастика, физкультурный досуг (занятие)
Этапы работы над проектом
Этапы
Самостоятельная деятельность детей
Совместная деятельность детей и взрослых
Формулирование проблемы
Скоро праздник – День народного единства
Подготовительный
Беседа с детьми о празднике
Экскурсии в в/ч.
Практическая деятельность
Аппликация «Флаг России». Рисование рисунков по теме
Составление рассказа на тему: «Россия – Великая страна».
Презентация
Выставка детских работ
Стендовая информация «О подвигах наших предков».
Материально-технические ресурсы: подобрать иллюстрации, открытки. подготовить музыкальный диск, оформить выставку.
Конспект НОД «Путешествие на планету Роботов».
Конспект НОД «Путешествие на планету Роботов»
Цель: конструирование роботов из геометрического конструктора.
Задачи:
Обучающие:
– обучать детей моделировать и конструировать из строительного материала и деталей конструкторов;
– формировать навыки работы с геометрическим конструктором;
– научить детей строить роботов;
– закрепить знания о геометрических объемных фигурах;
– закрепить название деталей строительного материала;
Воспитывающие:
– воспитание бережного отношения к окружающему миру;
– прививать навыки аккуратности и самостоятельности;
Развивающие:
– развивать мелкую моторику пальцев рук;
– развивать пространственное представление;
– развивать внимание, воображение, сообразительность;
Оборудование: конструктор разного вида и размера, автотрек, роботы различного вида, игрушки на пультах управления
Ход НОД.
Воспитатель: – Здравствуйте, ребята! В далёкой – далёкой Галактике существует очень интересная планета…. Сегодня я предлагаю отправится в космическое путешествие на эту планету, планету «Роботов».
– Прошу всех подойти ко мне и получить свой мульти-билет- паспорт.
Дети подходят получают свои билеты. (Приложение 1).
Я напоминаю правила поведения во время полета. Занять свои места…….
(Дети занимают свои места за столами).
Воспитатель: Мы рады вас приветствовать на нашем космическом корабле. Желаем вам приятного полета. Пристегните свои ремни, ведем обратный отсчет 10…..0 пуск.
Логопедическое упражнение «Полет» пропевание гласных с нарастанием силы голоса, чем громче голос, тем выше поднимаем руки.
Воспитатель: Мы прибыли на планету «Роботы» Отстегните свои ремни, паспорт положите на стол и выходите на планету. (подходят к выставке робототехники)
Воспитатель: Мы рады вас приветствовать на планете «Роботов». Ребята, как вы думаете кто, живет на этой планете? (Демонстрация и рассматривание выставки: автотрек, собака – робот, робот на пульте управления и т.п.).
(Дети говорят свои предположения).
Воспитатель: Правильно ребята роботы, а кто такие роботы? Робот — это машина с человекоподобным поведением, которая выполняет функции человека при взаимодействии с окружающим миром.
Воспитатель: Каких роботов вы знаете?
Дети: Роботы, которые помогают по хозяйству: готовят, убираются: робот – пылесос; спасают людей в чрезвычайных ситуациях
Воспитатель: Для чего нужны роботы? Зачем человек их изобретает?
Воспитатель: Роботы нужны, для того что помогать людям, они могут выполнять работу, которую человек не может или не в силах сделать.
– А у нас на планете встречаются роботы, какие они? Ответы детей
– А они едят? (Нет, они работают от батареек) Ответы детей
Воспитатель: Правильно ребята, молодцы!
Существует несколько разновидностей роботов и для каждого из них имеется своё определение. (Показ разновидностей роботов, техники и пр.)
– Промышленные роботы: машины, которые создают различную продукцию
– Бытовые роботы: автоматические пылесосы
– Боевые роботы: заменяют человека в военных целях
– Игрушки- роботы
Роботы очень актуальны в наше время. А на вопрос, способны ли роботы заменить людей, со временем ответит каждый человек сам для себя.
Ребята, а как называются люди (специалисты), создающие роботов? (инженер-робототехник)
Воспитатель: Молодцы ребята! Давайте мы поиграем в роботов.
Дети повторяют движения и речь капитана четко проговаривая слова по слогам:
Робот железный по планете шагает-
Робот железный все видит все знает-
Робот не ест, не спит и не пьет-
И дольше людей на планете живет.
Воспитатель: Давайте сделаем так, чтобы на планете было больше жителей-роботов! Для этого каждый из вас превратится в робототехника, и изобретет своего робота! Можно изобрести летающую тарелку, ракету……..(детям можно предложить схемы, по которым будут строить роботов, так же дети могут проявить фантазию и изготовить самостоятельно)
Конструирование роботов из
– большого конструктора
– среднего и мелкого конструктора
– конструктора «весёлая стройка»
– конструктора «Лего» (Приложения 2-8)
Воспитатель: Вот какие замечательные роботы у нас получились! Мы увеличили население планеты РОБОТОВ! МОЛОДЦЫ!
Приложение 1. Билеты.
Приложение 2.
Приложение 3
Приложение 4.
Приложение 5.
Приложение 6.
Приложение 7.
Приложение 8.
Фото из архива группы.
Конспект НОД в подготовительной группе. В Царстве цветов
Вашему вниманию конспект второго занятия по лекарственным растениям для подготовительной группы.
Цель занятия по растениям – закрепить знания, полученные на первом занятии; научить узнавать и различать некоторые лекарственные растения.
Задачи : фиксировать знания о растениях с детьми, об их полезных свойствах.
Развивать умение делать выводы и мышление, так же обогащать запас слов путем их разъяснения.
Развивать активность и выдержку у детей.
Научить давать описание растению и опознавать его по описанию.
Воспитывать уважение к природе, уметь слушать других детей и дополнять их ответы.
Словарная работа : отвар, настой, лекарственные растения.
Материал : Картинки с отдельными лекарственными растениями, мешочки для запаха с сухими травами (ромашка, мята, чабрец и гвоздика), заваренный чай с калиной, мятой и шиповником.
Ход занятия :
Воспитатель входит в группу с детьми. На доске уже закреплены картинки иллюстрирующие лекарственные растения. На столах разложены гербарии с лекарственными растениями.
Воспитатель: Посмотрите, ребята как красиво у нас. Как много на подоконниках комнатных растений. От этого уютно! А скажите где произрастают растения и где мы все их можем увидеть?
Дети: В парке, на огороде, в лесу и на лугу.
Воспитатель: Давайте дети мы представим что мы пришли на луг и сели полукругом.
Дети садятся полукругом на стульчики.
На лугу мы увидим Ромашку, Клевер, Лютик едкий, Гвоздику, Колокольчик, Смолку, Хвощ, Васильки, Подорожник, Вьюнки.
Воспитатель: А скажите дети, что это за растения? Как их все можно назвать иначе?
Дети: травы и цветы луговые.
Воспитатель: А какими качествами они обладают?
Дети: Лекарственными.
Воспитатель: А почему эти растения лекарственные?
Дети: Так как они имеют лекарственные свойства. Чтобы воспользоваться этими свойствами из растений делают отвары, настои и прочие лекарства.
Воспитатель: Посмотрите, как называется это растение? (показывает подорожник)
Дети: Это подорожник.
Воспитатель: А почему подорожник имеет такое называется?
Дети: потому что он произрастает вдоль дорог.
Воспитатель: Рассмотрите и пишите подорожник.
Дети: Листья с прочными прожилками, упругие, прижаты к земле. Корни – это густой пучок. Стебель упругий.
Воспитатель: Ребята, а как растение расселяется по земле?
Дети: Семена подорожника приклеиваются к ногам проходящих на время, а потом отпадают и так перебираются в новое место.
Воспитатель: А как с его помощью лечат?
Дети: Нужно сорвать лист с растения, немного помять чтобы выступил сок и приложить к ране.
Воспитатель: Дети, угадайте о каком растении речь в загадке? Вот она:
В беленьких платьицах,
желтые глазки…
вы назовете их без подсказки.
Дети: это ромашки.
Воспитатель: Одна из известных и распространенных – это аптечная ромашка.
А в чем полезные свойства ромашки?
Дети: Отваром из ромашки при ангине полощут горло.
Воспитатель: А еще ее используют в косметологии и кулинарии. Делают краски, крема и пасты.
А вот еще загадка о лекарственном растении.
Русская-красавица
Всем-нам-очень-нравится.
Бела-она,-стройна
Одежда-зелена.
Что это за такая красавица-то?
Дети: это береза.
Воспитатель: А как березу называют еще и почему?
Дети: Плакучая береза, так как ее веточки смотрят вниз.
Воспитатель: А какая у листьев березы форма?
Дети: Как сердце, сердцевидная форма.
Воспитатель: Медицина предлагает использовать против чесотки и для заживления ран березовый деготь. Из березы так же делают активированный уголь. Его используют при болях желудка и отравлении.
Теперь послушаем следующую загадку.
Воспитатель: О каком растении речь? Этот кустарник родственник садовой розы.
Дети: это шиповник.
Воспитатель: А почему Шиповник так называется?
Дети: так как на его ветвях есть шипы.
Воспитатель: хорошо. У шиповника не только цветы красивые, но и ягоды. Они буровато – красноватого или оранжевого цвета.
А за что люди ценят Шиповник?
Дети: В его ягодах содержится много витамина «Ц». Из плодов готовят отвар, который пьют для укрепления сил организма. Маслом шиповника мажут раны при ожогах. Настоем лепестков шиповника смазывают кожу лица для освежения.
Воспитатель: Хорошо, ребята, а что у нас в группе за цветок с приятным запахом?
Дети: это комнатная мята.
Воспитатель: Мята – полезное растение. А кто из вас знает его свойства?
Дети: отвар его листочков от простуды поможет. Чай из листочков успокаивает. Мяту для освежения дыхания добавляют в пасту для чистки зубов.
Воспитатель: предложу вам определить растение по запаху. Отдаю несколько мешочков.
Дети узнают или не узнают растения. Воспитатель подсказывает, если что.
Воспитатель: Ребята, давайте отгадайте несколько загадок о растениях.
Солнышком-лучистым
В-травке-золотистой
Белым-облаком-по-полю-разлетится
(одуванчик)
В-красном-платьице-рябина
Вышла-с-осенью-проститься
Осень-проводила
Платье-снять-забыла.
(рябина, Калина)
Не-огонь,-а-жжется?
(крапива)
Воспитатель: А сейчас «Соберите пазлы с растениями».
Дети собирают картинки у двух столов на скорость.
Воспитатель: Ребята, а почему многие растения записаны в Красную книгу? Что это за Красная книга?
Дети: В эту книгу вписывают исчезающие редкие виды растений.
Воспитатель: Правильно, люди очень много сорвали растений и потому они стали встречаться очень редко. Расскажите же, как правильно собирать лекарственные растения.
Дети: Нельзя вырывать больше нескольких растений в одном месте.
Во время сбора нельзя есть корни и плоды. В конце нужно хорошо вымыть руки.
Воспитатель: Пока мы говорили о растениях, у нас заварился чай. Давайте попробуем его и определим какие растения использованы при заваривании.
Дети пробуют чай из трех чайников в которых заварены разные растения и определяют по вкусу их.
Конспект занятия в детском саду: В мире комнатных растений для детей 5-7 лет.
Автор : Нерсесян Наира Игоревна, воспитатель МБДОУ “Детский сад общеразвивающего вида № 144”, г. Воронеж
Назначение : Воспитатели ДОО, учителя начальных классов, любознательные родители. Конспект подходит для занятия с детьми 5-7 лет.
Цель : Называть растения и основные его части. Правильно ухаживать за растениями.
Задачи -Расширять знания о комнатных растениях.
-Дать представление о размножении комнатных растений.
-Развивать навыки исследовательской деятельности детей 5-7 лет в ходе совместной деятельности.
-Воспитывать бережное отношение к природе.
-Развивать любознательность, трудолюбие.
-Научить изображать комнатные растения.
-Совершенствовать навыки по уходу за растениями.

-Ознакомить с несколькими видами комнатных растений.
-Расширять знания воспитанников по экологической культуре.
Предварительная работа Создание предметной среды, направленной на развитие интереса детей к растениям, наличие демонстрационного материала: картинки и плакаты из серии >. Видеоматериал – для показа на экране.
Ход занятия
Воспитатель Отгадайте загадки:> (Растение).Очищают воздух,
Создают уют,
На окнах зеленеют,
Круглый год цветут.(Комнатные растения)
О чем сегодня будем говорить? (О комнатных растениях).
Накрыт бокал с водицей,
Ежовой рукавицей. (Кактус)
В кадке вырос куст,
И широк,и густ:
Лист как кожаный,
Плотно сложенный,
Ствол бузиновый,
Как резиновый. (Фикус)
Лист с горбочком, желобочком,
Шипы имеет,а ранить не умеет,
Зато лечит нас в любой час. (Алое)
На окне стоит горшок,
В нём чудеснейший цветок,
Фиолетовый, изящный,
Ароматом манящий! (Фиалка)
Воспитатель Какие еще комнатные растения,кроме вышеперечисленных вы знаете? (Каланхоэ, кала, папоротник).

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

Пятое условие для роста растений какое?(Необходима вода – их надо регулярно поливать).
Посмотрим как растет цветок.
Дети называют основные части растения (корень, стебель, лист, цветок, плод с семенами).
Комнатных растений очень много, познакомимся еще с несколькими из них.
Вверх по стенке крутой,
По бетонке литой,
Многоножка ползет,
С собой листья везет. (Плющ)
По очереди на экране дети смотрят на картинки растений,с воспитателем повторяют сложные имена и запоминают(герань, колеус, бегония, гардения, агава).
Физкультминутка
Во дворе растёт подсолнух.
Во дворе растёт подсолнух,
Утром тянется он к солнцу. (Дети встают на одну ногу и тянут руки вверх.)
Рядом с ним второй, похожий,
К солнцу тянется он тоже. (Дети встают на другую ногу и снова тянут руки вверх.)
Вертим ручками по кругу.
Не задень случайно друга!
Несколько кругов вперёд,
А потом наоборот.

Отдохнули мы чудесно,
И пора нам сесть на место. (Дети садятся.)
Воспитатель Как правильно ухаживать за комнатными растениями?(Поливать, рыхлить, опрыскивать,вытирать пыль, мыть). Давайте будем всегда дружно ухаживать за нашими комнатными растениями. (Дети поливают цветы, вытирают пыль, опрыскивают с указаниями воспитателя)
Для закрепления правильного ухода за растениями смотрят видеоматериал, воспитатель комментирует
Воспитатель Рассмотрите все картинки и нарисуйте ваше комнатное растение.
Воспитатель Из всех рисунков выберите наиболее выразительные и самые аккуратные.
вера щукина
Конспект занятия по окружающему миру на тему «Комнатные растения» в подготовительной группе
Конспект занятия по окружающему миру на тему «Комнатные растения » в подготовительной группе
Цели :
Формировать у детей элементарных представлений о комнатных растениях ;
Познакомить детей с комнатными растениями (геранью, бегонией, бальзамином, алоэ, кактусом, папоротником, хлорофитумом, традесканцией, фиалкой. )
Учить детей различать данные растения по внешнему виду .
Совершенствовать навыки ухода за растениями .
Дать представление о размножении комнатных растений
Воспитатель : Ребята, отгадайте загадки :
Зелёный, в колючках,
Похож на ежа,
А цветки атласные
Белые, жёлтые, красные. (Кактус)
Нет в мире ничего нежней и краше,
Чем этот сверток алых лепестков,
Раскрывшийся благоуханной чашей…”
Назовите этот цветок – царицу всех цветов (Роза)
Я тоже в комнате расту ,
И пусть я без цветов-
Тебе я ранки залечу
Без всяких докторов. (Алоэ) .
Меня по кличке все зовут,
А имени не знают.
Но будет сухо или дождь-
Я тут же сообщаю. (Бальзамин)
Был тугим он кулачком,
А разжался – стал цветком. (Бутон)
В сумраке да в сырости
Рада травка вырасти
Перистым кустом,
С пальмовым листом. (Папоротник)
Дышит, растет , а ходить не может (Растение )
Воспитатель : Мы сегодня поговорим о комнатных растениях . А почему их называют комнатные растения , комнатные цветы .
(ответы детей)
Воспитатель : Правильно, ребята. Комнатное садоводство – выращивание растений в жилых или общественных помещениях. Растения , которые способны успешно выживать и развиваться в условиях таких помещений, называются комнатными растениями . Комнатное садоводство особенно распространено в странах с продолжительной суровой зимой.
Ребята, какие комнатные растения вы знаете ? (Фиалку, плющ, хлорофитум и др.)
Скажите, что нужно для роста растения ? (ответы детей)
Сажаем в горшки (нужна почва)
Ставим на подоконник (нужен солнечный свет)
Поливаем (нужна вода для роста)
Рыхлим (нужен воздух для корней)
Все комнатные цветы можно поделить на несколько видов :
Декоративно-цветущие
Декоративно-лиственные
Плодовые
Декоративно-цветущие комнатные растения
К этой группе , пожалуй, относиться самое большое количество растений . Отличаются они не только красотой цветов и продолжительностью их цветения, но и периодом цветения и продолжительностью жизни.
Декоративно-лиственные комнатные растения
К этой группе относятся не только нецветущие растения , но и имеющие не слишком привлекательные цветы. Некоторые из них, бегония например, могут иметь декоративно-цветущие и декоративно-лиственные сорта Некоторые из них очень капризны.
Плодовые комнатные растения
Рядом с декоративными на подоконниках все чаще появляются растения , которые не только цветут, но дают плоды. Селекционеры для этих целей давно вывели небольшие сорта цитрусовых, граната, кофейного дерева, авокадо. Многие любители умудряются выращивать на подоконниках огурцы и помидоры.
Воспитатель : а теперь посмотрим, как называются основные части растения (корень, стебель, лист, цветок, плод с семенами) .
Физкультминутка. Бабочка
Спал цветок и вдруг проснулся, (Туловище вправо, влево. )
Больше спать не захотел, (Туловище вперед, назад.)
Шевельнулся, потянулся, (Руки вверх, потянуться.)
Взвился вверх и полетел. (Руки вверх, вправо, влево.)
Солнце утром лишь проснется,
Бабочка кружит и вьется. (Покружиться .)
Воспитатель : А теперь, ребята, давайте поиграем. Давайте разделимся на две команды. Перед вами картинки цветов, но они разрезанные. Чья команда первая сложит изображение и скажет название, тот и выиграл в соревновании. Молодцы.
А сейчас мы тоже поухаживаем за нашими цветочками в группе .
Публикации по теме:
Задачи: -продолжать формировать у детей интерес к растительному миру; -закреплять знания названий комнатных растений; -уточнять представления.
Конспект занятия по окружающему миру в подготовительной группе «Зимующие птицы» Конспект занятия по ознакомлению с окружающим на тему: «Зимующие птицы». Программное содержание: – закрепить и уточнить представления.
Конспект занятия по окружающему миру в подготовительной группе «Ознакомление детей с животным миром родного края». Цель: 1. Познакомить детей с животным миром родного края. 2. Развивать связную речь, побуждая детей отвечать на вопросы полными предложениями.
Конспект занятия по окружающему миру в старшей группе «Комнатные растения» Ознакомление с окружающим миром
Конспект непосредственно образовательной деятельности для детей подготовительной к школе группы на тему “Рассматривание комнатных растений”
Земелькина Надежда Николаевна, воспитатель МБ ДОУ “Детский сад №203”, г. Новокузнецк.Описание работы: предлагаю конспект НОД по экологическому воспитанию для детей подготовительной к школе группы (6-7 лет) на тему “Рассматривание комнатных растений”. Данная работа будет полезна воспитателям дошкольных учреждений, работающих на старших и подготовительных к школе группах детского сада. Материал поможет воспитателям уточнить знания детей об известных комнатных растениях и способах ухода за ними.

Цель: уточнить знания об известных детям комнатных растениях и способах ухода за ними.
Задачи
Образовательные: учить устанавливать зависимость ухода от дифференцированных потребностей растений, внешнего строения; познакомить с новым комнатным растением колеус, и способом ухода за ним.
Развивающие: развивать умение описывать растения, выделяя характерные особенности.
Воспитательные: воспитывать осознанное отношение к уходу за растениями.
Демонстрационный материал: 7 – 8 видов знакомых детям комнатных растений, предметы ухода за комнатными растениями, указка, магнитофон, аудиозапись П.И. Чайковского «Времена года», фотографии с изображением комнатных растений.
Методические приёмы: слушание аудиозаписи, загадывание загадок, рассматривание растений, продуктивная деятельность детей, дидактическая игра, художественное слово, показ, повторение, подведение итогов.
Дети, нас всюду окружает природа. Мы любуемся белоствольными берёзками, стройными рябинками, яркими цветами. Красоту и богатство природы описывают в своих стихах поэты.
(ребёнок читает стихотворение С. Есенина «Берёза»)
Своё чувство средствами музыки выражают композиторы. Предлагаю вам послушать фрагмент из музыкального цикла «Времена года» П.И. Чайковского.
Природа всегда рядом с человеком. В нашей групповой комнате много растений, за которыми мы ухаживаем.
Давай пройдемся медленно по кругу
И «здравствуй» скажем, каждому цветку.
Я должен над цветами наклониться
Не для того, чтоб рвать или срезать,
А чтоб увидеть добрые их лица
И доброе лицо им показать.
Чтобы любить природу нужно много знать о ней. Сегодня мы поговорим о комнатных растениях. У меня на столе стоят разные растения, которые вы хорошо знаете. Покажите и назовите их.
Отгадайте загадки про комнатные растения:
Большие и мохнатые
Чуть-чуть розоватые
Спустили стебли низко
И смотрят на ребят.
Листочки здесь широкие,
Зелёные и тёмные,
Как будто бы мрачного
Омута глядят.
Что это за растение,
Кто скажет из ребят? (бегония)
***
Листьев нет – одни иголки,
Стебель тонкий и прямой.
Угадайте, кто такой? (аспарагус)
***
Из листка на удивленье
Можно вырастить растение.
Я сорву цветок, не жалко,
Будет новая…. (фиалка).
***
Ваньки мокрого цветки.
Так назвал его народ –
Много он водички пьёт.
А как правильно назвать,
Постарайся сам назвать! (Бальзамин)
***
Вверх по стенке крутой,
По бетонке литой
Многоножка ползет,
С собой листья везет. (Плющ)
***
– Что за хвост пошёл в рост:
Не в пруду, не в речке –
На окне, у печки. (Сансевьера /щучий хвост)
***
Хотели детишки от мамы удрать,
Но мама сумела их всех удержать.
Вот так и висят те пучки – малолетки.
На нитях – зелёные растения-детки. (Хлорофитум)
***
– Какие части растений вы знаете? (предлагаю показать)
– У всех ли растений есть стебли?
– У каких растений их нет?
– У разных растений стебли разные: есть прямые, вьющиеся, свисающие. Покажите стебли и назовите их особенности.
– Одинаковы ли листья у растений по цвету, форме, величине? (предлагаю показать и рассказать о листьях)
– А у всех ли растений есть листья? Например, у кактуса и аспарагуса листьев нет, а вместо них маленькие иголочки.
– Чтобы растения хорошо росли и цвели за ними нужно ухаживать. Расскажите, как ухаживать за растениями? (Предлагаю 1-2 детям правильно показать, как нужно поливать)
– Всем ли растениям нужно одинаковое количество влаги? Некоторые растения зимой отдыхают и их нужно поливать редко. Например, амариллис.
– А какие растения любят влагу? (бегония, традесканция)
– Для чего нужно рыхлить землю в горшочках? Правильно:
рыхление почвы проводят во влажном состоянии, при рыхлении сухой почвы можно повредить корни.
рыхлая почва способствует лучшему обеспечению растения водой (лучше впитывается вода)
рыхлая почва дольше удерживает влагу, чем уплотненная (предлагаю показать, как правильно рыхлить)
Недаром рыхление называют сухим поливом.
– Для чего нужно убирать с листьев пыль? Какие способы уборки пыли вы знаете? (протирать влажной губкой или тряпочкой, опрыскивать, стряхивать пыль сухой или влажной кисточкой)
(Предлагаю показать растения и объяснить, почему применяется тот или иной способ ухода. Вызываю несколько детей показать способы очищения листьев от пыли)
– Ребята, сегодня мы познакомимся с новым растением. Оно называется колеус, народное название – «крапивка». Само оно родом из жаркой Африки и тропических лесов Азии. (предлагаю отметить, чем оно отличается от других растений, предлагаю описать).
Давайте подумаем, как правильно ухаживать за колеусом. (вызываю нескольких детей показать, как правильно это делать)
Послушайте стихотворение про колеус:
Если я цвету –
Значит я умру,
Чаще нужно поливать
И, конечно, удобрять.
Чем больше света и тепла,
Тем краснее я, друзья.
А если света не хватает,
Зеленеть я начинаю.
А теперь, давайте поиграем в игру «Найди такой же».
Дидактическая игра «Найди такой же»
Дидактическая задача. Найти предметы по сходству.
Игровые действия. Поиск похожего предмета.
Правило. Показывать узнанное растение можно только по сигналу воспитателя, выслушав его описание.
Оборудование. Одинаковые растения, расставленные на двух столах или фотографии с изображением растений.
Ход игры. Воспитатель показывает какое-нибудь растение на одном из столов (фото), описывает его характерные особенности, а затем предлагает ребенку найти такое же растение в группе.
Итог НОД проводиться с помощью детей.
Программные задачи:
Уточнить и расширить представления о лекарственных растениях и их целебных свойствах;
Закрепить понятие о взаимосвязи растительного мира и человека;
Формировать умение ухаживать за растениями;
Воспитывать заботливое и бережное отношение ко всему живому.
Демонстрационный материал:
Гербарий, засушенные цветы липы, мёд, фотографии лекарственных растений.
Ход занятия.
1.Вводная часть.
Посмотрите внимательно, дети, что у меня в руках?
Растения.
Правильно. Сегодня мы поговорим о растениях. Давайте вспомним, что мы относим к растениям?
Деревья, цветы и кустарники.
Людям нужны растения?
Для чего?
— Молодцы. Без растений жизни на планете Земля не существовало бы. Растения не только помогают всем живым существам дышать, но также они помогают, лечится от болезней. Поэтому мы сегодня поговорим именно о лекарственных растениях.
2.Основная часть.
Природа предоставляет человеку огромное разнообразие даров- лекарства от всех болезней. Их надо только знать и уметь ими пользоваться. Многие люди сами занимаются сбором трав на лугу, в лесу, в поле. Может и ваши родители или бабушки тоже собирали лекарственные травы. Знания о лекарственных травах пригодятся каждому человеку. Прежде чем идти их собирать, необходимо всё о них знать.
— Сегодня мы познакомимся с некоторыми лекарственными растениями. — -Может мне кто назовёт уже знакомое лекарственное растение.
Давайте поиграем в игру «Отгадай загадку».
Я буду загадывать загадки, а вы глазами на стенде найдите отгадку. Кто найдёт поднимет руку.
Стоят в поле сестрички,
Жёлтый глазок
белые реснички (ромашка).
Кто нашёл это растение?
Это цветок ромашка, его белые лепестки обвивают ярко-жёлтый глазок.
Правильно, это многолетний цветок, цветёт он в июле-августе. Все лекарственные свойства находятся в цветке. Ромашки растут на солнечных лесных опушках, полянках.
Посмотрите дети на фотографию и на гербарий этого цветка. Вам нравится его красота? И людям оно очень нравится. Многие разводят ромашку у себя на клумбах, чтобы она лечила не только их кашель, но и радовала их душу своей красотой. Своей красотой ромашка привлекает и насекомых. Пчёлы, бабочки, шмели видят ромашку из далека и летят к ней за мёдом. О ромашке всегда хочется говорить стихами.
Как ромашка ты мила!
Твоя кофточка бела
Воротник золотой
На нас смотрит с добротой!
Послушайте следующую загадку.
Я знаменита не цветами,
А необычными листами:
То твердыми, холодными,
То мягкими и теплыми.(мать- и- мачеха)
Кто нашёл эту картинку?
Это растение называется Мать и мачеха. А вы знаете почему оно так называется? У него с одной стороны листочек тёплый- мать, а с другой холодый-мачеха. Ещё лежит на земле снег, а цветы мать-и-мачехи покрывают проталинки. С конца марта до мая улыбаются они солнышку. Прячась лишь вечером или в пасмурный день. Также это растение дружит с насекомыми и очень полезно для людей. Полезно пить чай — для очищения лёгких. Если положить лист тёплой стороной на ранку, то она вытягивает из неё боль, красноту. Вот такое полезное это растение.
Мы с вами поближе познакомились с двумя лекарственными растениями, а сейчас я хочу с вами поиграть в игру «Полезные свойства лекарственных растений». (все дети встают вокруг меня в круг).
Я буду вам по очереди кидать мяч и называть растение, а вы его ловить
и рассказывать полезные свойства.
1- одуванчик- используется для восстановления аппетита;
2-крапива- останавливает кровотечение;
3- ромашка – успокаивает сердце и душу;
4 – подорожник – листик используется для заживления ран;
5 – липа – липовый чай пьют при простуде;
6 – календула – свежий сок применяют для ушибов и ожогов;
7 – черёмуха – отвар черёмухи пьют при расстройстве желудка;
8 – рябина – хорошо используется в косметике;
9 – шиповник – вкусный чай, маслом шиповника лечат ожоги;
10 – мать -и- мачеха – полезно пить чай для очищения лёгких.
Молодцы, дети, мы вспомнили свойства знакомых нам лекарственных растений и закрепили новые знания.
А кто мне скажет на территории нашего детского сада деревья с лекарственными растениями? (Липа).
Правильно это липа – стройное, высокое дерево с густой пышной кроной. Зацветает липа в середине лета, в июле.
У меня на столе в тарелочке лежат цветы липы. Давайте возьмём по одному цветочку на ладошку и рассмотрим их. Это красивые жёлтые цветы собранные как бы в небольшой букетик. В цветах липы много сладкого сока – поэтому липа считается медоносным деревом.
3. Заключительная часть.
Вот сколько много интересного мы сегодня узнали. У меня для вас есть сюрприз. Сегодня мы тоже о себе позаботимся. Мы будем пить липовый чай.
Детский сад №29 г.Челябинск
Официальный сайт
Муниципального бюджетного дошкольного образовательного учреждения
“Детский сад №29 г. Челябинска”
ПРОФИЛАКТИЧЕСКИЕ МЕРОПРИЯТИЯ
Здравствуйте, уважаемые посетители нашего сайта! Мы рады приветствовать Вас на виртуальном пространстве
Детского сада №29 .
Будем знакомы!
Наш детский сад открыл свои двери для дошколят в 1969 году. С 2003 года приоритетными направлениями деятельности нашего детского сада является сохранение и укрепления физического здоровья дошкольников и коррекция опорно-двигательного аппарата. В конце 2015 года путем реорганизации (Распоряжения Администрации города Челябинска от 25.09.2015г. №10245-к) наш детский сад объединился с детским садом №154. В настоящее время МБДОУ №29 имеет два здания, которые расположились по улице Василевского, 72 и Грозненская, 56.
На данным момент в нашем детском саду функционируют группы компенсирующей направленности для детей с нарушением опорно-двигательного аппарата (ул.Василевского, 72) и группы компенсирующей направленности для детей с задержкой психического развития и группа для детей с нарушением интеллекта ( ул. Грозненская, 56), а так же общеобразовательные группы.
Согревать и создавать хорошее настроение нашим мальчишкам и девчонкам, помочь им вырасти здоровыми, умными и добрыми – наша главная задача.![]()
Конечно же, мы считаем свой детский сад самым лучшим и необыкновенным, а наших педагогов и воспитанников – самыми талантливыми. А уж рассказывать об этом можем до бесконечности! Но, как говорится, лучше один раз увидеть, чем сто раз услышать. Надеемся, что на страницах этого сайта вы сможете составить собственное представление о том, как живет и работает коллектив нашего детского сада.
Детский сад на Грозненской,56 Детский сад на Василевского, 72
УЧРЕДИТЕЛЬ: Комитет по делам образования города Челябинска
Юридический адрес: 454080, г. Челябинск, ул. Володарского, 14
Телефон: (351) 266-54-40
E-mail: [email protected]
ОФИЦИАЛЬНО
Горячая линия «Экстремизму – НЕТ!»
Конспект НОД “Птица-синица” для детей 4-5 лет.

Конспект НОД «Птица-синица» для детей 4-5 лет.
Цель: уточнение и расширение представления детей о синице, её внешнем виде, питании, особенностях жизни в зимних условиях.
Задачи: расширять знания детей об условиях жизни птиц зимой, закрепить понятие зимующие птицы, воспитывать заботливое отношение к птицам, активизировать в речи обобщающие слова “оседлые птицы”, расширять словарный запас, развивать мелкую моторику рук, учить раскрашивать птиц в пределах контура, нанося штрихи в одном направлении.
Оборудование: фотографии синиц, плакат с изображениями различных зимующих птиц, магнитофон, аудиозапись пения синицы, аудиозаписи с музыкой Моцарта, раскраски синиц, цветные карандаши.
Предварительная работа: наблюдения за птицами на прогулке, рассматривание иллюстраций птиц.
Ход:
1. Организационный момент
(Изображения синицы)
С жёлтой грудкою летит
Что это за птица?
Как наряден ее вид!
Звать ее – синица!
Летом мошек ест она,
А в морозец зерна
По характеру шустра,
Быстра и проворна.
2. Беседа по теме
Посмотрите, какая красивая птица. Спинка у нее желтовато-зеленого цвета, брюшко желтое с широкой черной полосой – кажется, будто синичка нарядилась в желтую кофточку с черным галстуком и в зеленый плащик, а голову украсила темной шапочкой. Видите? Верхняя сторона головы, бока шеи, горло и прилежащая блестяще-черные, а бока головы белые. Крылья серовато-голубого цвета со светлой поперечной полосой. Хвост черноватый с голубоватым налетом
Живут синицы в разных лесах, обычно на открытых участках, опушках, по берегам водоёмов. Гнезда устраивают в дуплах дятлов, реже в выгнившей древесине дерева на месте выпавшего сучка, за отставшей корой, в щелях деревянных построек, в старых гнездах белок Тяготеет к жилью человека, часто встречается в крупных городах и других населённых пунктах, в пригородах, в садах и парках. В городах синицы охотно селятся в домиках сделанных человеком. Как они называются? Скворечники.
Синица, как правило, оседлая птица. Что это значит?…Значит, что она живёт на одном месте. Не улетает далеко. В отличие от кочующих птиц.
Синица подвижная, вертлявая птица. Размером примерно с воробья, имеет достаточно длинный хвост.
3. Появляется плакат с изображением различных зимующих птиц. Сравнивание синицы с другими птицами.
4. Беседа по теме
Птиц назвали синицами потому, что они издают довольно громкий мелодичный посвист «сии-сии» Но она умеет петь по-разному: Песня — громкий перезвон «ци-ци-ци-пи», «ин-чи-ин-чи», крик — звонкое «пинь-пинь-чрррж». Весной однообразная песня «зин-зи-вер», «зинь-зинь». Она то нежно и тихо посвистывает, то заведет громкую перекличку: «пинь-пинь-пинь», вроде зяблика, то испуганно затрещит: «пинь-тарара» или с бесконечными интонациями повторяет свой двухсложный посвист: «фи-фи». В конце зимы, приблизительно с февраля, большие синицы становятся оживленнее. В оттепель уже слышится их двух- или трехсложный напев — ритмичное повторение звенящих или иногда как бы «звякающих» звуков («ци-ци-фи-ци-ци-фи» или «цу-ви-цу-ви-цу-ви»). У каждого певца своя интонация
(Звучит аудиозапись с пением синицы) MP3
Ребята, а вы знаете, чем питаются синицы?
Летом они едят мелких насекомых, жуков и тем самым , приносит несомненную пользу природе Уничтожая большое количество вредителей леса. Осенью синицы питаются семенами, ягодами и плодами. А зимой совсем мало остается пищи для синиц. Поэтому они из лесов прилетают поближе к людям в поисках корма. Как вы думаете, чем мы можем помочь птицам? … А чем можно подкармливать синиц? … Семечками, пшеном. А еще синички любят клевать кусочки мяса и сала…
5. Физминутка
Песня про синичек (Наталья Ключкина)
В небесах такая синь, синь, синь –
Насмотреться невозможно.
За окном синички тинь-тинь-тинь.
Не спугни их, осторожно.
А когда наступят хо-ло-да,
И закружат злые вьюги,
Покорми синичек. Мы всег-да
Позаботимся о друге.
Ты насыпь в кормушку се-ме-на
И повесь кусочек сала,
Чтоб зимой синичка ни од-на
В стужу бы не голодала.
Снова будет в небе синь, синь, синь,
Снег искрится так красиво.
За окном синички тинь-тинь-тинь
Говорят тебе “спасибо”.
6. Повторение изученного материала
Молодцы! Садитесь. А теперь скажите мне еще раз как называется птичка? Где живет? Почему, когда становится холодно, они прилетают ближе к людям?…Чем их нужно подкармливать?…
7. Раскрашивание с целью закрепления материала
А теперь посмотрите что у меня есть. Кто это? Давайте их раскрасим. Карандаши какого цвета нам понадобятся, чтобы раскрасить синичек? Желтый, синий, черный. Приступайте
Раскрашивание под музыку (Моцарт в аранжировке для детей)
Слышу я: звенит синица
Средь желтеющих ветвей;
Здравствуй, маленькая птица,
Вестница осенних дней! (тургенев)
8. Итог занятия, оценка деятельности детей.
паспорт – нпм
Passport — это экспресс-совместимая аутентификация
промежуточное ПО для Node. js.
Passport является аутентификация запросов, что он делает через расширяемый набор плагинов, известный как стратегий . Паспорт не вставляется маршруты или принять любую конкретную схему базы данных, которая максимизирует гибкость и позволяет разработчику принимать решения на уровне приложения. API это просто: вы предоставляете Passport запрос на аутентификацию, а Passport предоставляет хуки для управления тем, что происходит, когда аутентификация проходит успешно или неудачно.
Sponsors
LoginRadius создан для того, чтобы сообщество разработчиков интегрировало надежную аутентификацию и единый вход всего в несколько строк кода.
БЕСПЛАТНАЯ регистрация
Ваше корпоративное приложение.
Начните продавать корпоративным клиентам, написав всего несколько строк кода. Добавьте систему единого входа (и многое другое) за считанные минуты, а не месяцы.
Статус:
Установить
$ паспорт установки npm
Использование
Стратегии
Passport использует концепцию стратегий для аутентификации запросов. Стратегии
может варьироваться от проверки учетных данных имени пользователя и пароля, делегированных
аутентификация с использованием OAuth (например, через Facebook
или Twitter) или федеративной аутентификации с использованием OpenID.
Перед аутентификацией запросов стратегия (или стратегии), используемые приложение должно быть настроено.
паспорт.использовать(новый LocalStrategy( функция (имя пользователя, пароль, готово) { User.findOne({имя пользователя: имя пользователя}, функция (ошибка, пользователь) { если (ошибка) { вернуть сделано (ошибка); } if (!user) { return done(null, false); } если (!пользователь.verifyPassword (пароль)) { return done (null, false); } вернуть готово (ноль, пользователь); }); } ));
Существует более 480 стратегий. Найдите нужные на сайте:passportjs.org
.Сессии
Passport будет поддерживать постоянные сеансы входа в систему. Для того, чтобы настойчиво
сеансы для работы, аутентифицированный пользователь должен быть сериализован в сеанс, и
десериализуется при выполнении последующих запросов.
Passport не накладывает никаких ограничений на то, как хранятся ваши пользовательские записи.Вместо этого вы предоставляете функции Passport, которые реализуют необходимые логика сериализации и десериализации. В типичном приложении это будет так же просто, как сериализация идентификатора пользователя и поиск пользователя по идентификатору, когда десериализация.
паспорт.serializeUser (функция (пользователь, выполнено) { сделано (ноль, user.id); }); паспорт.deserializeUser (функция (идентификатор, сделано) { User.findById (идентификатор, функция (ошибка, пользователь) { сделано (ошибка, пользователь); }); });
Промежуточное ПО
Чтобы использовать Passport в экспресс или
Приложение на основе подключения, настройте его
с необходимым паспортом .initialize()
промежуточное ПО. Если ваше приложение использует
постоянные сеансы входа в систему (рекомендуется, но не требуется), pass.session()
также необходимо использовать промежуточное ПО.
вар приложение = экспресс(); app.use(require('serve-static')(__dirname + '/../../public')); app.use(require('cookie-parser')()); app.use(require('body-parser').urlencoded({extended: true})); app.use(require('express-session')({secret: 'keyboard cat', resave: true, saveUninitialized: true })); app.use(passport.initialize()); приложение.использовать (паспорт.сессия());
Аутентифицировать запросы
Passport предоставляет функцию authentication()
, которая используется в качестве маршрута.
промежуточное ПО для аутентификации запросов.
app.post('/логин', pass.authenticate('local', { failureRedirect: '/login' }), функция (требование, разрешение) { res.redirect('/'); });
Стратегии
Passport имеет полный набор из более 480 стратегий аутентификации. охватывает социальные сети, корпоративную интеграцию, услуги API и многое другое.
Искать все стратегии
Поиск стратегии на сайтеpassportjs. org
В следующей таблице перечислены часто используемые стратегии:
Примеры
- Полный рабочий пример см. в примере который использует паспорт-местный.
- Локальная стратегия : обратитесь к следующим руководствам по настройке аутентификации пользователя с помощью LocalStrategy (
Passport-local
): - Социальная аутентификация : Обратитесь к следующим руководствам по настройке различных стратегий социальной аутентификации:
Связанные модули
Страница модулей на wiki перечисляет другие полезные модули которые основаны на Passport или интегрированы с ним.
Лицензия
Лицензия Массачусетского технологического института
Copyright (c) 2011-2021 Джаред Хэнсон
Node JS с упрощенной аутентификацией по паспорту | by Prashant Ram
Следующие шаги показывают основной синтаксис паспорта для интеграции «Pashport JS» в ваше приложение NodeJS Express.
Шаг 1: Импортируйте библиотеки в ваш файл
//Импорт Express
const express = require('express')
const app = express() //Импорт основного паспорта и экспресс-сессии library
constpassport=require('passport')
const session = require('express-session') // Импорт вторичной библиотеки "Стратегия"
const LocalStrategy = require('passport-local') .Стратегия // В этом примере мы будем использовать «локальную» стратегию
Шаг 2: Инициализация ПО промежуточного слоя
app.use(session({
secret: "secret",
resave: false ,
saveUninitialized: true ,
}))
// Это базовая экспресс-инициализация сеанса ({..}). app.use(passport.initialize())
// инициализировать паспорт при каждом вызове маршрута. app.use(passport.session())
// разрешить паспорту использовать "экспресс-сессию".![]()
Шаг 3: Используйте паспорт для определения стратегии аутентификации
паспорт.use(new LocalStrategy (authUser)) // "authUser" — это функция, которую мы определим позже, которая будет содержать шаги для аутентификации пользователя и будет возвращать "аутентифицированного пользователя".
Шаг 3a: Определите функцию «authUser» для получения аутентифицированных пользователей
Функция «authUser» — это функция обратного вызова, которая требуется в рамках LocalStrategy и может принимать три аргумента.
«Пользователь» и «пароль» заполняются из «req.body.username» и «req.body.password».Их можно использовать для поиска в БД, чтобы найти и аутентифицировать имя пользователя/пароль, которые были введены в форме «логин».
authUser = (пользователь, пароль, выполнено) => { //Поиск пользователя, пароль в БД для аутентификации пользователя //Предположим, что поиск в вашей БД дал совпадение имени пользователя и пароля для "Кайл".let authentication_user = {id: 123, name: "Kyle"} return done (null, authentication_user )
}
Функция “done()” затем используется для передачи “{authenticated_user}” в функцию serializeUser( ) функция.
Обратите внимание, функция done(
1. Если пользователь не найден в БД, false) 2. Если пользователь найден в БД, но пароль не совпадает,
выполнено (null, false) 3. Если пользователь найден в БД и пароль совпадает,
выполнено ( null, {authenticated_user})
i.е.
- , если пользователь не найден,
выполнено ( <нет ошибки> , поэтому ноль, <нет подходящего пользователя> , поэтому false ), - , если пользователь найден, но пароль не совпадает,
(
выполнено <нет ошибки> , поэтому null , <нет подходящего пользователя> , поэтому false ) - , если пользователь найден и пароль совпадает, мы нашли нашего аутентифицированного пользователя и сделали ( <нет ошибки> , поэтому null, <пропустить аутентифицированного пользователя в serializeUser()>)
Шаг 4: Сериализация и десериализация (аутентифицированных) пользователей
SerializedUser:
паспорт.serializeUser ( ( userObj , done) => { done(null, userObj )}) ---------- ЧТО ДЕЛАЕТ СЕРИАЛИЗОВАТЬ ПОЛЬЗОВАТЕЛЬСКОЕ СРЕДСТВО? 1. "express-session" создает объект "req.session" , когда он вызывается через app.use(session({..})) 2. "passport" затем добавляет дополнительный объект " рек.сессия. паспорт "на настоящую "рек.сессию".3. Все, что делает функция serializeUser(),
получает объект "аутентифицированный пользователь" из структуры "Стратегия" и прикрепляет аутентифицированного пользователя к " req.session.passport.user.{..} "В приведенном выше случае мы получаем {id: 123, name: "Kyle"} из done() в функции authUser в структуре стратегии,
, так что это будет быть прикрепленным как
req.session.passport.user. {id: 123, name: "Kyle"}
3.Таким образом, во время "serializeUser" библиотека PassportJS добавляет аутентифицированного пользователя в конец " req.session.passport " объект.
Это то, что подразумевается под сериализацией. Это позволяет аутентифицированному пользователю быть "привязанным" к уникальному сеансу.Вот почему используется библиотека PassportJS, поскольку она абстрагируется от этого и напрямую поддерживает аутентифицированных пользователей для каждого сеанса в пределах "req.session.passport.user. {..} " ----- -----------------------
Десериализация пользователя:
Теперь в любое время, когда нам нужны данные пользователя для сеанса, мы можем просто получить объект который хранится в «req.session.passport. пользователя.{..}».
Мы можем извлечь информацию о пользователе из файла {..} объект и выполните дополнительный поиск в нашей базе данных для этого пользователя, чтобы получить дополнительную информацию о пользователе или просто отобразить имя пользователя на панели инструментов.
pass.deserializeUser(( userObj , done) => { done (null, userObj )})----------------ЧТО ЗНАЧИТ DE SERIALIZ USER?1 . Passport JS удобно заполняет значение «userObj» в deserializeUser() объектом, прикрепленным в конце «req.session.passport.user.{..}» 2. Когда выполнено (null, user) вызывается в deserializeUser(), Passport JS берет этот последний объект, присоединенный к "req.session.passport.user.{..}" , и присоединяет его к "req.user" т.е. " req.user.{..} "В нашем случае, так как после вызова done() в " serializeUser» у нас было req.session.passport.user. {id: 123, name: «Kyle»} , вызов done() в «deserializeUser» возьмет этот последний объект, который был прикреплен к req. session.passport.user.{..} и прикрепить к req.user.{..}
т.е. req.user. {id: 123, name: "Kyle"} 3.Таким образом, "req.user" будет содержать объект аутентифицированного пользователя для этого сеанса , и вы можете использовать его в любом из маршрутов в приложении Node JS.
напр.
app.get("/dashboard", (req, res) => {
res.render("dashboard.ejs", {name: req.user.name })
})
Шаг 5: Использование pass.authenticate() в качестве промежуточного программного обеспечения на вашем маршруте входа
Теперь вы можете использовать функцию паспорта.authenticate() в app.post() и указать приложение successRedirect и failureRedirect,
.post ("/login", pass.authenticate ('local', {
successRedirect: "/dashboard",
failureRedirect: "/login",
}))
‘local’ означает, что мы используем ‘ локальная стратегия. Если бы вы использовали Google или Facebook для аутентификации, там было бы написано «google» или «facebook» вместо «local».
Шаг 6: Используйте функцию «req.

Passport JS удобно предоставляет «req. isAuthenticated()» , эта функция
- возвращает «true» в случае, если аутентифицированный пользователь присутствует в «req.session.passport.user» или
- возвращает «false» в случае в «req.session.passport.user» нет аутентифицированного пользователя.
Функцию «req.isAuthenticated()» можно использовать для защиты маршрутов, доступ к которым возможен только после входа пользователя, например. приборная доска.
Создайте функцию следующим образом:
------------checkAuthenticated = (req, res, next) => {
if ( req.isAuthenticated() ) { return next() }
рез.redirect("/login")
}------------ Теперь вы можете использовать эту функцию в качестве промежуточного программного обеспечения для защиты ваших маршрутов следующим образом, app.get("/dashboard", checkAuthenticated , ( req, res) => {
res.render("dashboard.ejs", {name: req.user.name})
})
Аналогично, если пользователь уже вошел в систему и пытается получить доступ к «регистрации» или экран входа в систему, вы можете направить их на (защищенный) экран «приборной панели».
Создайте функцию следующим образом:
-----------checkLoggedIn = (req, res, next) => {
if ( req.isAuthenticated() ) {
return res.redirect("/dashboard")
}
next()
}------------ Теперь вы можете использовать эту функцию в качестве промежуточного программного обеспечения следующим образом: .get("/login", checkLoggedIn , (req, res) => {
res.render("login.ejs")
})
Шаг 7: Используйте «req.logOut()», чтобы очистить session object
Passport JS также удобно предоставляет нам «req. logOut() », которая при вызове очищает объект «req.session. passport» и удаляет все прикрепленные параметры.
Это можно использовать для выхода из системы следующим образом:
app.delete("/logout", (req,res) => {
req.logOut()
res.redirect("/login")
console.log(`-------> Пользователь вышел из системы`)
})
Обратите внимание, что когда вызывается функция req.logOut() , она очищает как «req.session.passport » и «req.user», т.е.
«req.session.passport» -------> {}
«req.user» -------> undefined
Node.js и Express Tutorial: Аутентификация с помощью Passport
В этом руководстве вы узнаете, как защитить веб-приложение Node.js , созданное с помощью платформы Express . Вы будете использовать Passport.js с Auth0 для управления аутентификацией пользователей и защиты маршрутов клиента, использующего API. Клиент визуализируется на стороне сервера с использованием шаблонов Pug , оформленных с помощью CSS .
Вы начинаете с этой главы?Ищите эмодзи 🛠️️, если хотите просмотреть содержимое, сосредоточившись на этапах сборки.
Если вы начинаете с этой главы, выполните следующие шаги, чтобы настроить простое веб-приложение, созданное с помощью Express и Pug, которое является основой для упражнений по безопасности в этой главе: b starter [email protected]:auth0-blog/wab-portal-express.git
Чтобы быстро скопировать команды, трижды щелкните их , чтобы выделить их полностью.
🛠️️ Make WAB-Portal-Express
Текущий рабочий каталог:
CD WAB-Portal-Express
🛠️️ Установите зависимости проекта:
NPM I
🛠️️ Запустите сервер используя nodemon
под капотом:
npm run dev
🛠️️ В отдельном окне терминала обслуживаем клиента со статического сервера используя Browsersync под капотом:
npm run ui
1 1 1 1 1 1 1 сервер работает на порту 8000
с nodemon
.
package.json
, для получения более подробной информации. 🛠️️ Чтобы увидеть приложение в действии, посетите http://localhost:3000
в своем браузере.
Что вы создадите
Вы защитите портал входа в ресторан с именем WHATABYTE, используя Passport.js с Auth0:
Мы протестировали это руководство, используя Node.js v12.16.0
и npm v6.13.4
. Если вам нужно установить Node.js и npm, используйте любой из официальных пакетов Node.js для вашей операционной системы.
Настройка реальной аутентификации для Node.js
Основная цель этого руководства — научить вас, как настроить реальную аутентификацию в приложении Node.js Express. По этой причине вы начнете с настройки Auth0 для взаимодействия с реальным сервером аутентификации на протяжении всего руководства. В противном случае Passport.js выдает массу сообщений об ошибках в терминале, и приложение не запускается.
Auth0 — мировой лидер в области «Идентификация как услуга» (IDaaS).Его расширяемая платформа легко аутентифицирует и защищает более 2,5 миллиардов входов в систему в месяц, что делает ее любимой разработчиками и надежной компанией со всего мира.
Лучшая часть платформы Auth0 — это то, как легко начать работу, выполнив эти три простых шага.
Шаг 1: Зарегистрируйтесь и создайте приложение Auth0
🛠️️ Если вы новичок в Auth0, зарегистрируйте бесплатную учетную запись Auth0 здесь. Бесплатная учетная запись предлагает вам:
🛠️️ В процессе регистрации вы создадите что-то под названием Tenant , представляющее продукт или услугу, к которым вы добавляете аутентификацию — подробнее об этом чуть позже.
🛠️️ После входа в систему вас приветствует панель управления Auth0. В меню левой боковой панели нажмите «Приложения».
Допустим, у вас есть приложение React для обмена фотографиями под названием «Noddit». Затем вы должны создать арендатора Auth0 с именем noddit
.
Теперь скажем, что Noddit доступен на трех платформах : веб как одностраничное приложение и как родное мобильное приложение для Android и iOS .Если для каждой платформы требуется аутентификация, вам необходимо создать три приложения Auth0 , чтобы предоставить продукту все необходимое для аутентификации пользователей на этой платформе.
🛠️️ Затем нажмите кнопку Создать приложение в представлении «Приложения». Откроется модальное окно «Создать приложение». Вы можете указать Имя для приложения и выбрать его тип :
Имя : WHATABYTE Express Portal
Тип приложения : Обычные веб-приложения
Создать 95. 07️
Загружается вкладка Quick Start на странице вашего приложения, где Auth0 предоставляет различные руководства, которые помогут вам приступить к работе с настройкой проекта. Если вам интересно, ознакомьтесь с кратким руководством по Node.js; в противном случае, продолжайте читать.
Шаг 2. Создайте коммуникационный мост между Express и Auth0
Чтобы уменьшить нагрузку на добавление и управление аутентификацией, Auth0 предлагает страницу универсального входа, которая является наиболее безопасным способом простой аутентификации пользователей для веб-приложений, не беспокоясь о формы входа.
Как работает универсальный вход?
Вызов конечной точки GET /login
из вашего приложения переводит ваших пользователей на страницу входа Auth0.
После входа в систему Auth0 перенаправляет их обратно в ваше приложение. С учетом безопасности, чтобы это произошло, вам необходимо настроить приложение Auth0 с URL-адресами, которые оно может использовать для перенаправления пользователей после их аутентификации.
Ваш браузер не поддерживает видео HTML5.Вот ссылка на видео универсального входа вместо этого.
🛠️️ Чтобы настроить приложение Auth0, перейдите на вкладку Настройки . Оказавшись там, заполните следующие поля следующим образом:
- 🛠️️ Разрешенные URL-адреса обратного вызова :
http://localhost:3000/callback, http://localhost:8000/callback
- 7 Разрешенные URL-адреса выхода :
http://localhost:3000/, http://localhost:8000/
Если вы посмотрите на пакет .json
, вы увидите, что в этом проекте можно запустить два сценария npm:
Чтобы убедиться, что Auth0 может подключаться к любой из этих двух сред, вы вводите URL-адреса, которые используют оба номера порта.
🛠️️ Сохраните эти настройки, прокрутив вниз и нажав Сохранить изменения .
Шаг 3: Добавьте переменные конфигурации Auth0 в Node.js
🛠️️ В каталоге проекта создайте скрытый файл с именем .env
для хранения переменных конфигурации и секретов, которые нужны вашему приложению.
touch .env
Обязательно добавьте этот файл в .gitignore
, чтобы он не был привязан к контролю версий .
🛠️️ Добавьте следующее в .env
:
AUTH0_CLIENT_ID=
AUTH0_DOMAIN=
Auth0_client_secret =
🛠️️ Вернуться к вашему приложению AUTH0 Настройки Вкладка и заполните каждое свойство HiDDen файл .env
с соответствующим значением приложения AUTH0:
- 🛠️️
auth0_domain
- ваш домен
Когда вы создали новую учетную запись с Auth0, вы выбрали имя для своего клиента.Это имя используется в качестве поддомена auth0.com
и становится вашим уникальным доменом приложения Auth0. Это базовый URL-адрес, который вы используете для доступа к API Auth0, и URL-адрес, по которому ваше приложение перенаправляет пользователей на Auth0 для их аутентификации.
Вы также можете использовать пользовательские домены, чтобы Auth0 выполнял за вас тяжелую работу по аутентификации без ущерба для качества брендинга.
- 🛠️️
- 🛠️️
- 🛠️️
auth0_client_id
- это ваш клиент ID
AUTH0, назначает каждому приложению идентификатор клиента при создании, который представляет собой буквенно-цифровую строку, которая действует как уникальный идентификатор для вашего приложения (например,
Q8Fij2iug0cmgplftfg1tzgdtqygatua
) .Его нельзя изменить, и он используется вашим приложением при выполнении вызовов API Auth0.- 🛠️️
AUTH0_CLIENT_SECRET
— это ваш секрет клиента
Секрет клиента Auth0 является критическим значением, поскольку он защищает ваши ресурсы, предоставляя учетные данные, связанные с аутентификацией, только в виде токенов токена
уполномоченный.
Думайте об этом как о пароле вашего приложения, который должен всегда оставаться конфиденциальным .Если кто-либо получит доступ к вашему Client Secret , он сможет выдать себя за ваше приложение и получить доступ к защищенным ресурсам.
Вместе эти переменные позволяют вашему приложению идентифицировать себя как авторизованную сторону для взаимодействия с сервером аутентификации Auth0.
Добавление аутентификации пользователя в приложение Express
После настройки реального сервера аутентификации вы готовы узнать, как добавить аутентификацию пользователя в приложение Express с помощью Passport.
🛠️️ Для начала вам нужно создать конечную точку
GET /login
в вашем API, чтобы управлять всем, что связано с аутентификацией пользователя, что означает проверку личности пользователя.Сказать, что реализация аутентификации сложна, не будет преуменьшением. Сам процесс аутентификации относительно прост; однако сложно правильно и безопасно реализовать каждый шаг процесса и следовать рекомендациям, предложенным Open Web Application Security Project (OWASP), которые включают:
- Реализация надлежащих средств контроля надежности пароля, таких как длина пароля, и топология.
- Внедрение безопасных механизмов восстановления пароля.
- Безопасное хранение паролей, включая хеширование паролей с солью.
- Передача паролей только через TLS или другой надежный транспорт.
- Правильная реализация проверки подлинности и сообщений об ошибках, которые смягчают перечисление идентификаторов пользователей и паролей.
- Предотвращение атак грубой силы.
Эти передовые методы проверки подлинности направлены на различные направления атак и устраняют уязвимости в процессе проверки подлинности, которые могут поставить под угрозу личность ваших пользователей.Технически ваша команда может реализовать все эти шаги аутентификации, но, как вы уже поняли, это рискованное предприятие. Вместо этого вы можете переложить риск и ответственность строгой аутентификации на платформу идентификации, такую как Auth0, чтобы сосредоточиться на создании функций, не беспокоясь о деталях безопасности.
🛠️️ Чтобы связать ваше приложение с Auth0, вы будете использовать SDK Node.
js. Затем каждый раз, когда пользователь пытается пройти аутентификацию, сервер аутентификации Auth0 проверит его личность и отправит необходимую информацию обратно в ваше приложение.
Использовать ПО промежуточного слоя для аутентификации
Как поясняется в разделе «Использование ПО промежуточного слоя» документации Express, приложение Express представляет собой серию вызовов функций ПО промежуточного слоя, которые выполняются во время цикла запрос-ответ. Каждая функция может изменять объекты запроса и ответа по мере необходимости, а затем либо передавать управление следующей функции промежуточного программного обеспечения, либо завершать цикл запрос-ответ.
При создании защищенных маршрутов в Express необходимо знать статус аутентификации пользователя перед выполнением логики контроллеров маршрутов.Таким образом, аутентификация в Express — это шаг в цикле запрос-ответ, который вы можете реализовать как промежуточное ПО.
Чтобы упростить реализацию аутентификации, вместо написания всего кода, необходимого для структурирования промежуточного программного обеспечения аутентификации, вы будете использовать Passport.
js, простое и ненавязчивое промежуточное программное обеспечение аутентификации для Node.js, созданное Джаредом Хэнсоном, бывшим главным архитектором. на Auth0.
Настройте Passport.js с Node и Express
Как описано в Passport.js «Обзор», аутентификация принимает различные формы: пользователи могут войти в систему, указав имя пользователя и пароль, или выполнить единый вход с помощью поставщика OAuth, такого как Facebook или Twitter.
Passport.js предлагает различные механизмы аутентификации, известные как стратегии , для удовлетворения уникальных требований аутентификации каждого приложения. Passport.js упаковывает стратегии в виде отдельных модулей, и вы можете выбирать, какие стратегии использовать, не создавая ненужных зависимостей.
🛠️️ Вы собираетесь использовать стратегию аутентификации Auth0 с Passport.js, чтобы вам не пришлось беспокоиться о создании учетных данных пользователя и управлении ими самостоятельно. Для начала установите следующие пакеты:
npm ipassport-auth0 express-session dotenv
Вот разбивка каждого пакета, который вы устанавливаете: совместимое промежуточное ПО аутентификации для Node.
js.
- 🛠️️
паспорт-auth0
: это стратегия аутентификации Auth0 для Passport.js.экспресс-сеанс
: Это модуль для создания промежуточного программного обеспечения сеанса и управления им.dotenv
: это модуль с нулевой зависимостью, который загружает переменные среды из файла.env
вprocess.env
.
Настройка экспресс-сессии
🛠️️ Далее открываем
index.js
и добавьте следующее в разделRequired External Modules
:константный экспресс = требуется ("экспресс"); постоянный путь = требуется ("путь"); const expressSession = require("Экспресс-сеанс"); const паспорт = требовать("паспорт"); const Auth0Strategy = require("passport-auth0"); требуют("dotenv").config();
Вы добавляете импорт для
экспресс-сеанса
,паспорт
ипаспорт-аутентификация0
, которые вы настроите в следующих разделах.Вы также используете
dotenv
для загрузки переменных среды, которые вы храните в.env
.🛠️️ Между разделами
App Variables
иApp Configuration
создайте два новых раздела,Session Configuration
иPassport Configuration
:константное приложение = экспресс(); постоянный порт = process.env.PORT || «8000»;
Вопросы заказа в Express. Пожалуйста, убедитесь, что вы добавляете разделы в правильном порядке.
🛠️️ В разделе
Session Configuration
настройтеexpressSession
следующим образом:постоянный сеанс = { секрет: process.env.SESSION_SECRET, куки: {}, пересохранить: ложь, saveUninitialized: ложь }; если (app.get("env") === "производство") { session.cookie.secure = истина; }
expressSession
принимает объект конфигурации,session
, который определяет, какие параметры включить в сеансе.Здесь вы настраиваете следующие параметры:
секрет
: это секрет, используемый для подписи файла cookie идентификатора сеанса, который может быть либо строкой для одного секрета, либо массивом из нескольких секретов.Вскоре вы создадите переменную окруженияSESSION_SECRET
.cookie
: Это объект настроек для cookie идентификатора сеанса. Значение по умолчанию:{ путь: '/', httpOnly: true, secure: false, maxAge: null }
. Вы устанавливаете это как пустой объект.resave
: Этот параметр принудительно сохраняет сеанс обратно в хранилище сеансов, даже если приложение не изменяет сеанс во время запроса.Для стратегии Auth0 Passport.js это значение должно бытьfalse
.saveUninitialized
: Это заставляет новый, но не измененный сеанс, неинициализированный , быть сохраненным в хранилище. Passport.js обрабатывает изменение сеанса, поэтому вы можете установить для него значениеfalse
.Если установлено значение
true
, когда ваша веб-страница сканируется ботами, она создает сеанс для них в дополнение к пользователям, которые только посещают вашу главную страницу, но не входят в систему, что использует больше сеансов и памяти.
Подробнее читайте в этом комментарии Гейба де Луки, указывающего на недостатки сохранения неинициализированных сессий.
Теперь вам нужно создать секрет сеанса для приложения.
🛠️ Откройте
.env
и добавьте переменнуюSESSION_SECRET
иAUTH0_CALLBACK_URL
нижеAUTH0_CLIENT_SECRET
:9003..." AUTH0_DOMAIN="..." AUTH0_CLIENT_SECRET="..." SESSION_SECRET= AUTH0_CALLBACK_URL=http://localhost:3000/callback
🛠️ Выполните следующую команду, чтобы сгенерировать подходящую строку для секрета сеанса:
node -e "console.log(crypto.randomBytes(32).toString('hex'))"
🛠️ Скопируйте и вставьте вывод команды выше как значение для
SESSION_SECRET
в.
.env
Вы узнаете, что
AUTH0_CALLBACK_URL
делает для вашего приложения после того, как вы настроите Passport.js в следующем разделе.🛠️ Перезапустите сервер, работающий на порту
8000
, чтобы Express мог распознать эти новые переменные. Затем обновите страницу, на которой работает пользовательский интерфейс. .Кроме того, когда ваше приложение работает как рабочий экземпляр, вы будете отправлять файлы cookie только через HTTPS:
if (app.get("env") === "production") { session.cookie.secure = истина; }
Если для параметра
session.cookie.secure
задано значениеtrue
, совместимые клиенты не будут отправлять файлы cookie обратно на сервер, если браузер не имеет соединения HTTPS. Таким образом, для использования безопасных файлов cookie требуется веб-сайт с поддержкой HTTPS.🛠️️ Далее, в разделе
Конфигурация приложения
, скажите своему приложению Express использоватьexpressSession
с только что созданным объектомsession
:приложение.
set("views", path.join(__dirname, "views")); app.set("движок просмотра", "мопс"); app.use(express.static(path.join(__dirname, "public"))); app.use (expressSession (сеанс));
🛠️️ После настройки промежуточного программного обеспечения сеанса вы готовы добавить и настроить Passport.js в своем приложении.
Настройте Passport с помощью параметров приложения
В этом разделе вы сосредоточитесь на подключении Passport.js к вашему приложению Express.
🛠️️ Импортировав
Auth0Strategy
, перейдите к определению этой стратегии в разделеPassport Configuration
в указателе.js
:константная стратегия = новая Auth0Strategy( { домен: процесс.env.AUTH0_DOMAIN, идентификатор клиента: process.env.AUTH0_CLIENT_ID, clientSecret: процесс.env.AUTH0_CLIENT_SECRET, callbackURL: process.env.AUTH0_CALLBACK_URL }, function(accessToken, refreshToken, extraParams, profile, done) { вернуть готово (ноль, профиль); } );
Здесь метод
Auth0Strategy
принимает ваши учетные данные Auth0 и инициализирует стратегию.Важно понимать, что делает для вас
Auth0Strategy
:Функция обратного вызова, переданная методу
Auth0Strategy
, известна как обратный вызов Verification , целью которого является поиск пользователя, обладающего набором реквизиты для входа.Когда Passport.js проверяет подлинность запроса, он анализирует учетные данные или любую другую информацию для проверки подлинности, содержащуюся в запросе.
Затем он вызывает обратный вызов Verify с данными аутентификации в качестве аргументов, в данном случае
accessToken
,refreshToken
,extraParams
иprofile
.Поскольку Passport.js является промежуточной функцией, обратный вызов Verify также получает
done
в качестве аргумента для передачи управления следующей промежуточной функции.Поскольку Auth0 выполняет всю проверку учетных данных за вас, обратный вызов Verify вызывает
done
для предоставления в Passport пользователя, который прошел аутентификацию через объект профиля .
🛠️️ После определения стратегии
app.use()
из Express.Для выполнения этих задач обновите разделApp Configuration
вindex.js
следующим образом:app.set("представления", path.join(__dirname, "представления")); app.set("движок просмотра", "мопс"); app.use(express.static(path.join(__dirname, "public"))); app.use (expressSession (сеанс)); паспорт.использование(стратегия); app.use(passport.initialize()); app.use(passport.session());
После привязки промежуточного программного обеспечения
express-session
expressSession(session(session)
к промежуточному программному обеспечению уровня приложения необходимо убедиться, чтоpassport.initialize()
иpassion.
добавлены.session()
Хранение и извлечение пользовательских данных из сеанса
🛠️️ Последний шаг в настройке Passport.js — поддержка сеансов входа в систему путем сериализации и десериализации экземпляров пользователей в сеансе и из него. Чтобы интегрировать эту функцию, еще раз обновите раздел
App Configuration
следующим образом:. app.set("представления", path.join(__dirname, "представления")); app.set("движок просмотра", "мопс"); app.use(express.static(path.join(__dirname, "public"))); app.use (expressSession (сеанс)); паспорт.использование (стратегия); app.use(passport.initialize()); app.use(passport.session()); паспорт.serializeUser((пользователь, готово) => { сделано (ноль, пользователь); }); паспорт.deserializeUser((пользователь, готово) => { сделано (ноль, пользователь); });
Очень важно, чтобы объем данных, хранящихся в рамках сеанса, был небольшим, чтобы обеспечить хорошую производительность и быстрый поиск пользователей.
Приложение только сериализует пользовательский объект в сеанс. Когда сервер получает последующие запросы, этот сохраненный объект используется для определения местонахождения пользователя и переназначения его на
req.пользователь
.Теперь, когда вы настроили Passport.js, следующим шагом будет добавление конечных точек аутентификации в ваш API для обработки входа и выхода пользователей, а также предоставление конечной точки для сервера аутентификации Auth0 для связи с вашим приложением.
«Несмотря на сложности, связанные с аутентификацией, код не должен быть сложным. Это философия Passport.js, которая предоставляет простое, ненавязчивое промежуточное ПО для аутентификации для Node.js»
Tweet This
Создание конечных точек экспресс-аутентификации
🛠️️ В этом разделе вы создадите три конечные точки, которые обрабатывают поток аутентификации приложения:
GET /login. ПОЛУЧИТЬ /выйти GET /callback
Чтобы лучше управлять этими конечными точками, вы создадите их в модуле аутентификации и экспортируете их через маршрутизатор Express, чтобы ваше приложение Express могло их использовать.
🛠️️ Для начала создайте файл
auth.js
в каталоге проекта.touch auth.js
Заполните его этим шаблоном, чтобы определить его структуру:
🛠️️ Затем добавьте следующее в раздел
Required External Modules
, чтобы импортировать необходимые пакеты и загрузить переменные среды:константный экспресс = требуется ("экспресс"); const router = express.Router(); const паспорт = требовать("паспорт"); const строка_запроса = требуется("строка_запроса"); требуют("дотенв").конфиг();
Вот обзор новых модулей, которые вы используете:
маршрутизатор
: Объект маршрутизатора — это изолированный экземпляр промежуточного программного обеспечения и маршрутов. Он способен выполнять только промежуточное ПО и функции маршрутизации. Каждое приложение Express имеет встроенный маршрутизатор приложений.util
: этот модуль предназначен для поддержки внутренних API-интерфейсов Node.js, предоставляя полезные служебные функции для выполнения таких задач, как форматирование и кодирование строк.
url
: Этот модуль предоставляет утилиты для разрешения и анализа URL.querystring
: Этот модуль предоставляет утилиты для разбора и форматирования строк запросов URL.
Вскоре вы увидите, как эти модули оптимизируют логику вашего контроллера маршрутов.
🛠️️ Первая конечная точка, которую вы создадите, — это
GET /login
. Обновите разделRoutes Definitions
вашегоauth.js
следующим образом:роутер.получить( "/авторизоваться", паспорт.аутентификация("auth0", { scope: "профиль электронной почты openid" }), (требование, разрешение) => { res.redirect("/"); } );
🛠️️
GET /login
выполняет вход пользователя. Эта конечная точка демонстрирует, как экспресс-маршрут может принимать несколько обратных вызовов после определения маршрутаи пути
(первый аргумент).Здесь вы передаете две функции обратного вызова:
Метод
passport.authenticate()
, который получает паспорт.js и объектoptions
, который определяет область примененияПользовательский обратный вызов вызывается после завершения
pass.authenticate()
. Этот обратный вызов обрабатывает успешную или неудачную аутентификацию и выдает ответ клиенту.
🛠️️ После того, как сервер аутентификации идентифицирует и проверяет пользователя, он вызывает конечную точку
GET /callback
из вашего API для передачи всех необходимых данных аутентификации.Реализуйте эту конечную точку, добавив следующее определениеGET /callback
в разделRoutes Definitions
:router.get("/логин", ...); router.get("/callback", (req, res, next) => { паспорт.аутентификация("auth0", (ошибка, пользователь, информация) => { если (ошибка) { вернуть следующий (ошибка); } если (!пользователь) { вернуть res.
redirect("/логин"); } req.logIn(пользователь, (ошибка) => { если (ошибка) { вернуть следующий (ошибка); } константа returnTo = требуется.сеанс.returnTo; удалить req.session.returnTo; res.redirect (возврат в || "/"); }); })(запрос, разрешение, следующий); });
GET /callback
выполняет последний этап аутентификации и перенаправляет на ранее запрошенный URL-адрес или/
, если этот URL-адрес не существует. В пользовательской функции обратного вызова вы проверяете наличие ошибкиerr
и определен ли объектпользователя
. В случае ошибки вы передаете управление следующей промежуточной функции вместе с объектом ошибки.Если аутентификация не удалась,user
является ложным, и вы перенаправляете пользователя обратно на страницу/login
.Поскольку вы вызываете метод
паспорта.authenticate()
в контроллере маршрута, он имеет доступ к объектам запросаreq
и ответаres
через замыкание.Если аутентификация прошла успешно, вы вызываете
req.LogIn()
, чтобы установить сеанс входа в систему.req.logIn()
— это функция, предоставляемая Passport.js для объектаreq
.По завершении операции входа в объектreq
добавляется свойствоuser
, содержащее всю информацию о пользователе.После установления сеанса входа в систему вы можете улучшить взаимодействие с пользователем, перенаправляя пользователей на страницу, которую они посещали до выполнения запроса аутентификации. Маршрут такой страницы — это значение
req.session.returnTo
, которое вы присваиваете переменнойreturnTo
перед ее удалением. Если определеноreturnTo
, вы перенаправляете пользователя на этот маршрут; в противном случае вы ведете их на страницу/user
, которая в идеале должна предоставить пользователю их информацию.Вы можете перенаправить на любые другие маршруты.
Как видите,
GET /callback
действует как мост между вашим приложением и сервером аутентификации Auth0. Используя Passport.js, вы можете упростить процесс создания сеанса входа и активного пользователя в своем приложении.🛠️️ Почти готово. Последней конечной точкой аутентификации, которую необходимо реализовать, является
GET /logout
, и она самая сложная. Добавьте следующее определениеGET /logout
в разделRoutes Definitions
:маршрутизатор.получить("/логин", ...); router.get("/обратный вызов", ...); router.get("/logout", (req, res) => { req.logOut(); пусть returnTo = req.protocol + "://" + req.hostname; постоянный порт = req.connection.localPort; if (порт !== не определено && порт !== 80 && порт !== 443) { вернуться к = process.env.NODE_ENV === "производство" ? `${возврат}/` : `${returnTo}:${порт}/`; } const logoutURL = новый URL( `https://${process.
env.AUTH0_DOMAIN}/v2/выход из системы` ); константная строка поиска = строка запроса.подстроить строку ({ client_id: process.env.AUTH0_CLIENT_ID, вернуться к: вернуться к }); logoutURL.search = строка поиска; res.redirect (URL-адрес выхода); });
Этот маршрут выполняет выход из сеанса и перенаправляет пользователя на домашнюю страницу.
Passport.js также предоставляет функцию
logOut()
для объекта запроса,req
, которую вы можете вызвать из любого контроллера маршрута, которому необходимо завершить сеанс входа в систему. Вызовreq.logOut()
удаляетreq.user
и очищает существующий сеанс входа в систему. После этого вы создаете URL-адрес, на который перенаправляются пользователи после завершения выхода, следующим образом:- Начните строку URL-адреса с протокола и имени хоста:
let returnTo = req.protocol + "://" + req.hostname;
- Определите, используете ли вы локальный порт.
Если порт не является ни
undefined
, ни номером порта по умолчанию для веб-серверов, использующих HTTP (80
), ни портом по умолчанию для веб-серверов, использующих HTTPS (443
), вы добавляете этот порт к строке URLreturnTo
если текущая среда Nodedevelopment
:
const port = req.соединение.локальныйПорт; if (порт !== не определено && порт !== 80 && порт !== 443) { вернуться к = process.env.NODE_ENV === "производство" ? `${возврат}/` : `${returnTo}:${порт}/`; }
- Используйте конструктор Node.js
URL()
вместе сutil.format()
, чтобы вернуть отформатированную строку, заменив спецификаторы формата (символы, которым предшествует знак процента,%
) на соответствующий аргумент. В этом случае спецификатор строки%s
заменяется значением процесса.env.AUTH0_DOMAIN
. Вы установите переменные Auth0 в следующем разделе.
const logoutURL = новый URL( `https://${process.env.AUTH0_DOMAIN}/v2/выход из системы` );
- Используя
querystring.stringify
, создайте строку запроса URL из объекта, который содержит идентификатор клиента Auth0 и URL-адресreturnTo
:
const searchString = querystring.stringify({ client_id: process.env.AUTH0_CLIENT_ID, вернуться к: вернуться к });
- Использование URL-адреса
.search
, получить и установить сериализованные части запросаlogoutURL
:
logoutURL.search = searchString;
- Наконец, перенаправьте пользователя на
logoutURL
:
res.redirect(logoutURL);
Конечная точка
GET /logout
не слишком длинная, но довольно сложная. Он использует различные API-интерфейсы Node для динамического построения пути выхода в зависимости от активной среды Node, порта, который использует сервер, и переменных конфигурации.🛠️️ Все конечные точки API аутентификации завершены. Теперь вам нужно экспортировать маршрутизатор и использовать его с приложением Express. Сначала добавьте эту строку в раздел
Module Exports
файлаauth.js
:. модуль.экспорт = маршрутизатор;
🛠️️ Затем откройте
index.js
и импортируйте маршрутизатор аутентификации в разделRequired External Modules
:константный экспресс = требуется ("экспресс"); постоянный путь = требуется ("путь"); const expressSession = require("Экспресс-сеанс"); const паспорт = требовать("паспорт"); const Auth0Strategy = require("passport-auth0"); требуют("дотенв").конфиг(); const authRouter = require("./auth");
🛠️️ Теперь смонтируйте
authRouter
по корневому пути/
вашего приложения Express, обновив разделApp Configuration
следующим образом:app.set("представления", path.join(__dirname, "представления")); app.set("движок просмотра", "мопс"); app.use(express.static(path.join(__dirname, "public"))); app.use (expressSession (сеанс)); паспорт.использование(стратегия); app.use(passport.initialize()); app.use(паспорт.сеанс()); паспорт.serializeUser( ... ); паспорт.deserializeUser( ... ); app.use("/", authRouter);
🛠️️ У вас есть конечная точка
GET /login
, но у вас нет кнопки входа. Обновитеviews/index.pug
, чтобы включить его:расширяет макет блочный макет-контент div.View.WelcomeView h2.Баннер WHATABYTE div.Сообщение div.Название h4 Делая все возможное h2 Пища для разработчиков span.Details Доступ к командному порталу WHATABYTE разд.навигационные кнопки если авторизован а(href="/пользователь") div.NavButton Просто погрузитесь! еще а(href="/логин") div.NavButton Войдите в систему
Теперь, когда вы нажимаете кнопку входа в систему на странице индекса, вызывается конечная точка
GET /login
. Как упоминалось ранее, конечная точка/login
предоставляет пользователю страницу входа, но где эта страница? При использовании Auth0 в качестве платформы для идентификации вам не нужно создавать страницу входа в систему, Auth0 предоставляет ее с надлежащей формой и безопасными сообщениями и подсказками об ошибках аутентификации.🛠️️ Последнее, что вам нужно сделать, это смонтировать промежуточную функцию на уровне приложения, чтобы определить значение переменной
isAuthenticated
, используемой в шаблонеindex.pug
.Создайте пользовательское промежуточное ПО с помощью Express
🛠️️ В
index.js
обновите разделApp Configuration
, чтобы дополнить объект ответаres
данными с сервера аутентификации. Сделайте это прямо над креплением маршрутизатора аутентификации:приложение.set("views", path.join(__dirname, "views")); app.set("движок просмотра", "мопс"); app.use(express.static(path.join(__dirname, "public"))); app.use (expressSession (сеанс)); паспорт.использование(стратегия); app.use(passport.initialize()); app.use(passport.session()); паспорт.serializeUser( ... ); паспорт.deserializeUser( ... ); app.use((req, res, next) => { res.locals.isAuthenticated = req.isAuthenticated(); следующий(); }); app.use("/", authRouter);
res.locals
— это свойство, используемое для предоставления информации на уровне запроса, такой как аутентифицированный пользователь и настройки пользователя.Затем эта информация становится доступной для представлений, отображаемых во время этого цикла запроса-ответа, таких как шаблоны, использующие переменнуюisAuthenticated
.Теперь кнопка на индексной странице может изменять свое содержимое в зависимости от того, вошел ли пользователь в систему с помощью Auth0 или нет.
Войдите в приложение Node.js Express
🛠️️ Перейдите на вкладку браузера, где запущено ваше приложение, и нажмите кнопку входа, чтобы проверить, правильно ли оно взаимодействует с Auth0 и что вы можете пройти аутентификацию.
🛠️️ Если вы все настроили правильно, приложение перенаправит вас на страницу универсального входа.
Как объяснялось ранее, эта страница входа предоставляется Auth0 с включенными батареями. Он обеспечивает не только вход в систему, но и регистрацию новых пользователей в вашем приложении. Если у вас уже есть существующая учетная запись пользователя, войдите в систему; в противном случае зарегистрируйтесь как новый пользователь.
🛠️️ Кроме того, вы можете зарегистрироваться и войти в систему с помощью Google, так как он включен по умолчанию в качестве социального провайдера.
🛠️️ Если вы входите в приложение с использованием Auth0 в первый раз, вы увидите диалоговое окно с просьбой разрешить вашему приложению доступ к данным профиля пользователя. Идите вперед и нажмите кнопку с зеленой стрелкой, чтобы авторизовать доступ.
Преимущество страницы универсального входа в том, что она является частью домена Auth0. Он позволяет делегировать аутентификацию пользователя, включая регистрацию, Auth0, что делает его удобным и безопасным.
Если вы не зарегистрировались в Google, если вы создали нового пользователя в процессе регистрации, вы получите электронное письмо с просьбой подтвердить свой адрес электронной почты.Существует множество настроек, которые вы можете настроить, чтобы настроить регистрацию и вход в систему для ваших пользователей, например, запрос имени пользователя для регистрации. Не стесняйтесь проверять различные варианты, представленные вам Auth0, на панели инструментов и в документации Auth0.
🛠️️ После того, как вы зарегистрируетесь или войдете в систему, Auth0 вернет вас на домашнюю страницу вашего приложения Express.
Обратите внимание, что метка кнопки на домашней странице изменилась с
Войти
наПросто погрузитесь!
, что означает, что приложение успешно аутентифицировало вас.Доступ к защищенным маршрутам
В своем приложении вы защищаете конечную точку
GET /user
с помощью промежуточного программного обеспечения Passport.js, чтобы предотвратить переход к ней, если приложение не аутентифицировало пользователя. Поскольку вы вошли в систему, при нажатии кнопки Just Dive In! , которая указывает на/user
, вы успешно перешли к этому представлению. В случае, если вы вышли из системы, при попытке доступа к маршруту/user
вы попадете на экран входа в систему Auth0.🛠️️ Для начала создайте промежуточную функцию с именем
secure
для защиты вашего маршрута/user
и убедитесь, что он доступен только в том случае, если пользователь вошел в систему. В разделеRoutes Definitions
файлаindex.js
, добавьте следующую функцию промежуточного программного обеспеченияconst secure = (req, res, next) => { если (треб. пользователь) { вернуть следующий(); } req.session.returnTo = req.originalUrl; res.redirect("/логин"); }; приложение.получить("/", ... ); app.get("/пользователь", ...);
🛠️️ Затем, все еще в разделе
Routes Definitions
, рефакторинг контроллераGET /user
, чтобы он использовал эту промежуточную функцию следующим образом:const secure = (req, res, next) => { ... }; app.get("/", ...); app.get("/user", защищенный, (req, res, следующий) => { const { _raw, _json, ...userProfile } = req.user; res.render ("пользователь", { заголовок: "Профиль", профиль пользователя: профиль пользователя }); });
Вы используете деструктуризацию объекта Javascript для распаковки значений из
req.объект пользователя
в отдельные переменные. Используя необязательный объектный аргумент методаres.render()
, вы передаете переменнуюuserProfile
в шаблон представления пользователя вместе с заголовком страницы.🛠️️ Посетите
http://localhost:3000/user
в браузере, если вы вошли в систему, теперь вы видите свой псевдоним в приветственном баннере и объектuserProfile
, отображаемый в формате JSON в контейнере содержимого.🛠️️ Если вы нажмете на кнопку Выйти , приложение перенесет вас на главную страницу.Посетите
http://localhost:3000/user
еще раз, и вы попадете на страницу входа, предоставленную Auth0. Войдите снова, и вы вернетесь на страницу пользователя.«Узнайте, как настроить Node.js и экспресс-аутентификацию с помощью Passport.js и Auth0».
Твитнуть это
Интеграция аутентификации завершена
Готово! Из этого руководства вы узнали, как работает Passport.js, как его настроить и как интегрировать с Node.js и Auth0, чтобы добавить аутентификацию в веб-приложения.Вы также узнали о передовых методах обеспечения безопасности и идентификации и о том, как платформа идентификации, такая как Auth0, позволяет делегировать команде экспертов гигантскую ответственность за обеспечение безопасности входа в систему.
Все, что вам осталось, это продолжить создание этого приложения по своему усмотрению. Не стесняйтесь углубляться в документацию по Auth0, чтобы узнать больше о том, как Auth0 помогает вам сэкономить время на реализации и управлении идентификацией. Используйте комментарии под этим сообщением в блоге, чтобы задавать вопросы, или присоединяйтесь к сообществу Auth0, чтобы общаться с другими разработчиками, такими как вы.
Спасибо за ваше время!
Я столкнулся с проблемой
Аутентификация в React с использованием Express, Node, Passport и MongoDB
Большинство приложений, которые вы разрабатываете, требуют какой-либо аутентификации. Вы можете добиться этого с помощью социального входа, сторонней аутентификации, такой как Auth0, или с помощью собственной аутентификации. Наличие собственного механизма аутентификации имеет как преимущества, так и недостатки. Недостатком является то, что вам нужно обрабатывать хранение хэшированных паролей, потоки, такие как забытый пароль, сброс пароля и т. д.Преимущество заключается в том, что у вас больше контроля над приложением, и вам не нужно полагаться на третьи стороны.
В этом руководстве мы увидим, как мы можем реализовать собственный механизм аутентификации. Это использование традиционной регистрации и входа в систему с использованием имени пользователя и пароля.
Мы будем использовать:
- Passport как промежуточное ПО для Node.js.
- MongoDB для хранения сведений о пользователе.
- JWT для идентификации запроса пользователя.
- Жетоны обновления для обновления JWT.
Архитектура приложения
Вот как будет выглядеть наш процесс входа в систему:
Вот как будет выглядеть аутентифицированный запрос:
Зачем нужны токены JWT и Refresh и что такое тихое обновление?
Возможно, вы уже знаете, что когда мы используем JWT для аутентификации, мы не храним JWT в серверной части. Мы идентифицируем пользователя, извлекая информацию из JWT с помощью секрета, используемого для создания JWT.Таким образом, сервер не может аннулировать JWT (если только мы не изменим секрет JWT, что приведет к выходу из системы всех пользователей!) или определить, исходит ли запрос от законного клиента или нет. В связи с этим создаются JWT с коротким сроком действия (например, 15 минут, который может варьироваться в зависимости от критичности приложения), так что даже если JWT будет украден, злоумышленник не сможет использовать его в течение более длительного времени.
Проблема с коротким сроком действия JWT заключается в том, что пользователь будет часто выходить из системы, что определенно не очень удобно для пользователя.Чтобы решить эту проблему, мы вводим токены обновления с очень длительным сроком действия (скажем, 30 дней). В отличие от JWT, токен обновления хранится в файле cookie, который создается на сервере (только HTTP, безопасный). таким образом предотвращается чтение любым уязвимым javascript файла cookie
refreshToken
(XSS-атака).Токены обновления создаются и сохраняются в базе данных во время входа/регистрации и записываются в файл cookie. После каждого короткого интервала (скажем, 5 минут, что меньше времени истечения JWT), Конечная точка
/refreshToken
будет вызываться в фоновом режиме ( Silent Refresh ) для обновления как JWT, так иrefreshToken
, как показано ниже:Кроме того, поскольку
refreshToken
хранится в базе данных, мы можем легко аннулировать сеанс пользователя, удалив токен обновления или пометив его как недействительный в базе данных.Почему JWT хранится в памяти? Почему не локальное хранилище?
Вы могли заметить во многих блогах и видеороликах, что не следует хранить JWT или какие-либо данные аутентификации в локальном хранилище или в файлах cookie на стороне клиента. Причина, по которой они могли указать, заключается в том, что локальное хранилище и файлы cookie на стороне клиента подвержены XSS-атакам. Тем не менее, хранение JWT в памяти не препятствует его чтению при наличии XSS-уязвимости, а лишь затрудняет его чтение злоумышленником. Таким образом, цель должна состоять в том, чтобы разработать приложение без уязвимости XSS (или любой другой, если на то пошло) и не беспокоиться о том, где хранить JWT!
Вы можете прочитать замечательную статью, описывающую, почему отказ от LocalStorage для токенов является неправильным решением
Почему не используются файлы cookie SameSite?
Вам может быть интересно, почему бы не использовать один файл cookie SameSite с HTTPOnly и Secure для хранения сеанса пользователя? Проблема с этим подходом:
- Файлы cookie SameSite требуют, чтобы клиент и сервер находились в одном домене.Поэтому, если ваш клиент развернут в другом домене, вы не сможете его использовать.
- Файлы cookie SameSite реализованы не полностью в некоторых браузерах.
Другие преимущества использования JWT:
- Поскольку JWT не нужно проверять по базе данных, он повышает производительность, избегая обращения к базе данных в каждом запросе.
- Поскольку JWT хранится на стороне клиента, он помогает предотвратить атаки XSRF/CSRF.
Реализация на стороне сервера
Создать новый узел.js с помощью следующей команды:
Откройте каталог, в котором вы запустили указанную выше команду, в своем любимом редакторе кода, обновите файл package.json с помощью сценария запуска:
package.json
1{
2 "имя": "mern-auth-server",
3 "версия": "1.0.0",
4 "описание": "",
5 "main": "index.js",
6 "scripts": {
7 "start": "node index.js",
8 "test": "echo \"Ошибка: тест не указан\" && выход 1"
9 },
10 "ключевые слова": [],
11 "автор": "",
12 "лицензия": "ISC"
13}
Теперь выполните следующую команду для установки пакетов:
1yarn добавить экспресс-парсер dotenv mongoose body-parser cors cookie-parser
- экспресс — используется для создания веб-фреймворка с помощью Node.js.
- dotenv — загружает переменные среды из файла
.env
. - мангуст — ODM для mongoDB.
- body-parser — анализирует тело запроса из таких запросов, как POST-запрос.
- cors — включение политик CORS для URL-адреса клиента.
- cookie-parser — для создания и чтения файла cookie
refreshToken
.
Теперь давайте создадим файл с именем
.env
в корневом каталоге проекта. В этом файле будут все конфигурации и секреты, используемые сервером.Вы встретите эти переменные в этом посте..env
1JWT_SECRET = jdhdhd-kjfjdhrhrerj-uurhr-jjge
2REFRESH_TOKEN_SECRET = fgkjddshfdjh773bdjsj84-jdjd774
3SESSION_EXPIRY = 60 * 15
4REFRESH_TOKEN_EXPIRY = 60 * 60 * 24 * 30
5MONGO_DB_CONNECTION_STRING = MongoDB: //127.0. 0.1:27017/mern_auth
6COOKIE_SECRET = jhdshhds884hfhhs-ew6dhjd
7WHITELISTED_DOMAINS = http://localhost:3000
.env файлы с производственными секретами не должны помещаться в кодовую базу. В развернутой среде задайте переменные среды в конфигурации сервера.
Создайте каталог с именем
utils
и создайте в нем файл с именемconnectdb.js
:Connectdb.js
1Const Mongoose = Требуется («Монтон»)
2CONST URL = Process.env.mongo_db_connection_string
3Const Connect = Mongoose.Connect (URL, {
4 UREWURLPARSER: TRUE,
5 USERALPARSERTTOPOLY: true,
6 useCreateIndex: true,
7})
8connect
9 .then(db => {
10 console.log("подключен к db")
11 })
12 .catch(err => {
13 console.log(err)
14 })
3
2
Как следует из названия, это помогает подключиться к экземпляру MongoDB, указанному в файле
.env
. Вы можете использовать либо локальный экземпляр, либо подключиться к облачному провайдеру, такому как MongoDB Atlas.Теперь создайте файл с именем
индексindex.js
со следующим кодом:.js
1const express = require("express")
2const cors = require("cors")
3const bodyParser = require("body-parser")
4const cookieParser = require("cookie-parser")
5
6if (process.env.NODE_ENV !== "production") {
7
8 require("dotenv").config()
9}
10require("./utils/connectdb")
11
12const приложение = экспресс()
13
14прил.use(bodyParser.json())
15app.use(cookieParser(process.env.COOKIE_SECRET))
16
17
18
19const белый список = process.env.WHITELISTED_DOMAINS
20 ? process.env.WHITELISTED_DOMAINS.split(",")
21 : []
22
23const corsOptions = {
24 origin: function (origin, callback) {
25 if (!origin || whitelist.indexOf(origin) !== -1) {
26 callback(null, true)
27 } else {
28 обратный вызов (новая ошибка («Не разрешено CORS»))
29 }
30 },
31
32 учетные данные: правда,
33}
34
35прил.использовать (cors (corsOptions))
36
37app.get("/", function (req, res) {
38 res.send({статус: "успешно"})
39})
40
41
42
43const server = app.listen(process.env.PORT || 8081, function () {
44 const port = server.address().port
45
46 console.log("Приложение запущено на порту:", порт)
47})
Здесь мы запускаем сервер на порту 8081 и подключаем маршрут
/
с успешным ответом.Запустите сервер с помощью следующей команды (вы можете использовать npm start или nodemon):
Теперь в консоли вы должны увидеть следующий вывод:
Если вы откроете URL-адрес http://localhost:8081 в браузере или почтальоне, вы увидите ответ об успешном завершении, как показано ниже:
Теперь, когда у нас есть готовая базовая настройка, давайте углубимся в часть аутентификации.
Паспорт js
Passport — это промежуточное ПО Node.js, используемое для аутентификации.В нем написаны разные стратегии, основанные на типе аутентификации, который мы хотели бы использовать. Он имеет стратегии для локальной аутентификации с использованием имени пользователя и пароля, а также для входа в социальные сети, такие как Google и Facebook.
Установка пакетов, связанных с паспортом
Давайте установим следующие пакеты:
1пряжа добавить паспорт паспорт-jwt паспорт-местный паспорт-местный-мангуст jsonwebtoken
- паспорт-jwt — стратегия паспорта для аутентификации с использованием JWT для дальнейших запросов после входа/регистрации.
- паспорт-местный — стратегия паспорта для аутентификации с использованием имени пользователя и пароля при входе в систему и регистрации.
- паспорт-локальный-мангуст — плагин Mongoose, который помогает в создании имени пользователя и пароля для входа с использованием паспорта.
- jsonwebtoken — помогает в создании и проверке JWT.
Создание пользовательской модели
Теперь давайте создадим модель пользователя. Создайте папку с именем
models
и файл с именемuser.js
внутри нее со следующим кодом:пользователя.js
1const mongoose = require("mongoose")
2const Schema = mongoose.Schema
3
4const паспортЛокальныйМангуст = требуется("паспорт-местный-мангуст")
5
6const Session = new Schema({
7 refreshToken: {
8 тип: строка,
9 по умолчанию: "",
10 },
11})
2
13Const User = Новая схема ({
14 Именные данные: {
15 Тип: строка,
16 по умолчанию: "",
17},
18 lastname: {
19 Тип: {
19 Тип: Строка,
20 по умолчанию: "",
21 },
22 authStrategy: {
23 тип: строка,
24 по умолчанию: "local",
25 },
729000 тип: {
7228 по умолчанию: 50,
29 },
30 refreshToken: {
31 тип: [Сеанс],
32 },
33})
3 90
35
36Пользователь.set("toJSON", {
37 transform: function (doc, ret, options) {
38 delete ret.refreshToken
39 return ret
40 },
41})
42
43User.plugin(passportLocalMongoose)
44
45module.exports = mongoose.model («Пользователь», Пользователь)
Здесь мы объявляем 2 схемы, один для хранения токенов обновления, а другой для хранения сведений о пользователе, таких как имя, фамилия, стратегия аутентификации, баллы (которые будут отображаться пользователю после входа в систему), и массив токенов обновления (для поддержки одновременного входа с нескольких устройств).
Кроме того, мы удалили токен обновления из функции
ПлагинtoJSON
, чтобы мы не раскрывали токены обновления пользователя всякий раз, когда мы сериализуем модель и отправляем данные в ответе API.паспорт-локальный-мангуст
предоставляет такие функции, какаутентификация
иserializeUser
, которые мы увидим в следующих разделах.Создание локальной стратегии
Теперь создадим локальную стратегию, которая будет использоваться при входе и регистрации:
Создайте папку с именем
стратегий
и файл с именемLocalStrategy.js
внутри него. Локальная стратегия использует методы, предоставляемыепаспортом-локальным-мангустом
, для аутентификации и сериализации пользователя.LocalStrategy.js
1const паспорт = требовать("паспорт")
2const LocalStrategy = требовать("локальный паспорт").Стратегия
3const Пользователь = требовать("../модели/пользователь")
4
5
6passport.use(new LocalStrategy(User.authenticate()))
7
8
9паспорт.сериализовать пользователя (пользователь. сериализовать пользователя ())
Создание стратегии JWT
Аналогично локальной стратегии, создайте файл с именем
JwtStrategy.js
внутри папкистратегий
со следующим кодом:JwtStrategy.js
1const паспорт = требовать("паспорт")
2const JwtStrategy = требовать("паспорт-jwt").Стратегия,
3 ExtractJwt = требовать("паспорт-jwt").ExtractJwt
3 40const Пользователь = требуется("../модели/пользователь")
5
6const opts = {}
7opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken()
8opts.secretOrKey = process.env.JWT_SECRET
9
10
11
12
12Passort.use (
13 Новая JWTSTSTRATEGY (OPTS, Функция (JWT_PAYLOAD, сделано) {
14
15
16 User.Findone ({_id: jwt_payload._id}, функция ( err, user) {
17 if (err) {
18 return done(err, false)
19 }
20 if (user) {
21 return done(null, user)
else 22 {
23 return done(null, false)
24
25 }
26 })
27 })
28)
Как вы могли видеть, мы используем функцию
fromAuthHeaderAsBearerToken
, указавJwtStrategy
для извлечения JWT из заголовка носителя аутентификации.Мы увидим, как передать JWT в заголовке аутентификации в следующих разделах. Другие экстракторы, поддерживаемые паспортом, вы найдете здесь.Создание функций, связанных с аутентификацией
Теперь давайте создадим несколько функций, используемых для аутентификации. Создайте файл с именем
.authentication.js
внутри корневого каталога со следующим кодом:authentication.js
1const паспорт = требовать ("паспорт")
2const jwt = требовать ("jsonwebtoken")
3const dev = процесс.env.NODE_ENV !== "производство"
4
5Exports.Cookie_Options = {
6 Httpnly: True,
7
8
8
9 Безопасное :! dev,
10 Подписано: true,
11 maxage: eval (process.env.refresh_token_expiry) * 1000 ,
12 тот же сайт: "нет",
13}
14
15exports.getToken = user => {
16 return jwt.sign(user, process.env.JWT_SECRET, {
17 expiresIn: eval(process.env.SESSION_EXPIRY),
18 })
19}
20
21Exports.getrefreshtoken = User => {
22 const Refreshtoken = jwt.sign (пользователь, process.env.refresh_token_secret, {
23 Expiresin: Eval (process.env.refresh_token_expiry),
24})
25 вернуть refreshToken
26}
27
28exports.verifyUser = паспорт.аутентификация("jwt", {сеанс: ложь})
-
COOKIE_OPTIONS
используется для создания файла cookie токена обновления, который должен быть httpOnly и безопасным, чтобы он не мог быть прочитан клиентским javascript.Для SameSite установлено значение «Нет», поскольку клиент и сервер будут находиться в разных доменах. -
getToken
используется для создания JWT. -
getRefreshToken
используется для создания токена обновления, который сам по себе является JWT. -
verifyUser
— это промежуточное ПО, которое необходимо вызывать для каждого аутентифицированного запроса.
Создание пользовательского маршрутизатора
Создайте папку с именем
route
и файл с именемuserRoutes.js
внутри нее со следующим кодом:пользовательских маршрута.js
1const express = require("express")
2const router = express.Router()
3const User = require("../models/user")
4
5const { getToken, COOKIE_OPTIONS, getRefreshToken } = require("../authenticate")
6
7router.post("/signup", (req, res, next) => {
8
9 if (!req.body.firstName) {
10 res.statusCode = 500
11 рез. send({
12 name: "FirstNameError",
13 message: "Требуется имя",
14 })
15 } else {
16 Пользователь.register(
17 новый пользователь ({ имя пользователя: req.body.username }),
18 req.body.password,
19 (ошибка, пользователь) => {
20 если (ошибка) {
21 res.statusCode = 500
22 res.send(err)
23 } else {
24 user.firstName = req.body.firstName
25 user.lastName = req.body.lastName || ""
26 const token = getToken({ _id: user._id })
27 const refreshToken = getRefreshToken({ _id: user._id })
28 user.refreshToken.push({ refreshToken })
29 user.save((ошибка, пользователь) => {
30 if (ошибка) {
31 res.statusCode = 500
3
res.send(err)
33 } else {
34 res.cookie("refreshToken", refreshToken, COOKIE_OPTIONS)
35 res.send({ успех: true, token })
36 }
3 90 } )
38 }
39 }
40 )
41 }
42})
43
44модуль.экспорт = маршрутизатор
Здесь мы определяем маршрут
/signup
для регистрации. Он вызывает функциюregister
из плагинапаспорта-локального-мангуста
с имя пользователя и пароль и обратный вызов, который будет вызван после регистрации пользователя.Когда пользователь успешно зарегистрирован, мы генерируем токен аутентификации (JWT) и токен обновления. Мы сохраняем имя и фамилию в базе данных вместе с токеном обновления.При успешном сохранении сведений в базе данных создается файл cookie
refreshToken
и маркер аутентификации (JWT) отправляется в теле ответа.Теперь давайте включим все эти файлы в
index.js
:index.js
1const express = require("express")
2const cors = require("cors")
3const bodyParser = require("body-parser")
4const cookieParser = require("cookie- парсер")
5const паспорт = требовать("паспорт")
6
7if (процесс.env.NODE_ENV !== "production") {
8
9 require("dotenv").config()
10}
11require("./utils/connectdb")
12
13require("./strategies/JwtStrategy")
14require("./strategies/LocalStrategy")
15require("./authenticate")
16
17const userRouter = require("./routes/userRoutes")
18
19const приложение = экспресс()
20
21app.use(bodyParser.json())
22app.use(cookieParser(process.env.COOKIE_SECRET))
23
24
25
26const белый список = process.env.WHITELISTED_DOMAINS
27 ? process.env.WHITELISTED_DOMAINS.split(",")
28 : []
29
30const corsOptions = {
31 origin: function (origin, callback) {
32 if (!origin || whitelist.indexOf(origin) !== -1) {
33 callback(null, true)
34 } else {
35 обратный вызов (новая ошибка («Не разрешено CORS»))
36 }
37 },
38
39 учетные данные: правда,
40}
41
42прил.использовать (cors (corsOptions))
43
44app.use(passport.initialize())
45
46app.use("/пользователи", userRouter)
47
48app.get("/", function (req, res) {
49 res.send({статус: "успешно"})
50})
51
52
53
54const server = app.listen(process.env.PORT || 8081, function () {
55 const port = server.address().port
56
57 консоль.log("Приложение запущено на порту:", порт)
58})
Тестирование с помощью почтальона
Теперь, если вы сделаете почтовый запрос на URL-адрес: http://localhost:8081/users/signup, с
username
,password
,firstName
иlastName
, вы сможете увидеть токен, сгенерированный в ответе.Если вы нажмете на Cookies, вы сможете увидеть файл cookie
refreshToken
:Если вы проверите базу данных, вы сможете увидеть созданную там запись пользователя:
Создание маршрута входа
Теперь, когда у нас есть способ зарегистрировать пользователя, давайте добавим маршрут входа в
userRoutes.js
:userRouter.js
1const express = require("express")
2const router = express.Router()
3const User = require("../models/user")
4const паспорт = require(" паспорт")
5
6const { getToken, COOKIE_OPTIONS, getRefreshToken } = require("../authenticate")
7
8
9
10router.post("/login",passport.authenticate("local"), (req, res, next) => {
11 const token = getToken({ _id: req.user._id })
12 const refreshToken = getRefreshToken({ _id: req.user._id })
13 User.findById(req.user._id).then(
14 user => {
15 user .refreshToken.push({ refreshToken})
16 user.save((ошибка, пользователь) => {
17 если (ошибка) {
18 res.statusCode = 500
19 res.send(ошибка)
20 } else {
21 res.cookie("refreshToken", refreshToken, COOKIE_OPTIONS)
22 рез.send({ успех: истина, токен })
23 }
24 })
25 },
26 err => следующий(ошибка)
27 )
28}) 90 90
30module.exports = маршрутизатор
Здесь мы подключаем локальную стратегию аутентификации, вызывая
pass.authenticate("local")
. Только если учетные данные действительны, тогда управление будет передано в тело маршрута входа. Если пользователь успешно вошел в систему, мы генерируем токен аутентификации и токен обновления.Мы сохраняем токен обновления в базе данных и устанавливаем его в файле cookie ответа. Маркер аутентификации (JWT) будет отправлен в теле ответа, чтобы клиент мог прикрепить его к последующему запросу.Если мы проверим его с помощью почтальона, вы сможете увидеть ответ, как показано ниже:
Если вы предоставили неверные учетные данные, вы получите ответ «Неавторизованный» с кодом ответа 401.
Создание маршрута refreshToken
Ранее мы видели, что будем выполнять автоматическое обновление, вызывая конечную точку
/refreshToken
, чтобы получить новый токен аутентификации (JWT).Теперь давайте обновимuserRoutes.js
с помощью/refreshToken
route:userRoutes.js
1
2const jwt = требуется ("jsonwebtoken")
3
4
5
6router.post("/refreshToken", (req, res, next) => {
7 const { signedCookies = {} } = req
8 const { refreshToken } = signedCookies
9
10 if (refreshToken) {
11 try {
12 const payload = jwt.Verify(refreshToken, process.env.REFRESH_TOKEN_SECRET)
13 const userId = payload._id
14 User.findOne({ _id: userId }).then(
15 user => {
16 if (user) {
17
18 const tokenIndex = user.refreshToken.findIndex(
19 item => item.refreshToken === refreshToken
20 )
21
22 если (tokenIndex === -1) {
23 рез.statusCode = 401
24 res.send ("Unauthorized")
25 } else {
26 const token = getToken ({ _id: userId })
27
28 const newRefreshToken = )
29 user.refreshToken[tokenIndex] = { refreshToken: newRefreshToken }
30 user.save((ошибка, пользователь) => {
31 если (ошибка) {
32 рез.statusCode = 500
33 res.send(err)
34 } else {
35 res.cookie("refreshToken", newRefreshToken, COOKIE_OPTIONS)
36 res.send({ успех: true, token 0) 37}
38})
39}
39}
40} else {
41 res.statuscode = 401
42 res.send ("несанкционировано")
43}
44},
45 Err = > следующий(ошибка)
46 )
47 } ловить (ошибка) {
48 рез.statuscode = 401
49 res.send ("несанкционирован")
50}
51} else {
52 RES.StatusCode = 401
53 RES.Send («Несанкционированный»)
54}
55 })
56
57
Здесь,
- Мы извлекаем токен обновления из подписанных файлов cookie.
- Мы сверяем токен обновления с секретом, использованным для создания токена обновления, и извлекаем из него полезную нагрузку (содержащую идентификатор пользователя).
- Затем мы определяем, существует ли еще токен обновления в базе данных. (в случае выхода из системы со всех устройств все токены обновления, принадлежащие пользователю, будут удалены, и пользователь будет вынужден снова войти в систему).
- Если он существует в базе данных, мы заменяем его вновь созданным токеном обновления.
- Аналогично шагам входа и регистрации, здесь также мы будем устанавливать токен обновления в файле cookie ответа и токен аутентификации (JWT) в теле ответа.
Если мы проверим это в почтальоне, вы увидите, что каждый раз создается новый токен обновления:
Конечная точка для получения сведений о пользователе
Теперь у нас есть конечная точка для получения сведений о вошедшем в систему пользователе:
USERTER.JS
1
1
2CONST {
3 Gettoken,
4 Cookie_Options,
5 Getrefreshtoken,
6 VerifyUser,
7} = Требовать ("../uctife")
8
9
10маршрутизатор.get("/me", verifyUser, (req, res, next) => {
11 res.send(req.user)
12})
13
14
Здесь мы вызываем промежуточное ПО
verifyUser
, которое, в свою очередь, вызывает стратегию JWT для проверки JWT и получения сведений о пользователе. Если вы не получаете данные о пользователе внутри стратегии JWT, то вы можете явно получить его в теле маршрута, перед отправкой сведений о пользователе в ответе.Чтобы получить данные пользователя, вам необходимо передать токен аутентификации (JWT), полученный в ответе на вход/регистрацию в почтальоне, как показано ниже:
Создание маршрута выхода
Прежде чем перейти к внешнему интерфейсу, давайте создадим последний маршрут, который будет использоваться для выхода пользователя из системы.
userRouter.js
1
2router.get("/logout", verifyUser, (req, res, next) => {
3 const { signedCookies = {} } = req
4 const { refreshToken } = signedCookies
5 User.findById(req.user._id).then(
6 user => {
7 const tokenIndex = user.refreshToken.findIndex(
8 item => item.refreshToken === refreshToken
9 )
10
11 если (tokenIndex !== -1) {
12 пользователь.refreshToken.id(user.refreshToken[tokenIndex]._id).remove()
13 }
14
15 user.save((ошибка, пользователь) => {
16 if (ошибка) {
17 res.statusCode = 500
18 res.send(ошибка)
19 0 res } else {
3 .clearCookie("refreshToken", COOKIE_OPTIONS)
21 res.send({ успех: true })
22 }
23 })
24 },
25 err) => 0 0 0 r 3 2 9 след.
27})
28
Здесь мы извлекаем файл cookie маркера обновления и удаляем его из базы данных, а также из файла cookie.Удаление токена аутентификации (JWT), который хранится в памяти браузера, произойдет во внешнем интерфейсе.
Реализация внешнего интерфейса
Создайте новый проект реакции, используя следующую команду
1npx создать-реагировать-приложение mern-auth-client
Добавление BlueprintJS для стилизации
Мы будем использовать BlueprintJS для оформления приложения. Итак, давайте установим его:
1 пряжа добавить @blueprintjs/core
В индексе
.css
, давайте включим файлы css, связанные с BlueprintJS:index.css
1@import "~normalize.css";
4body {
5 поле: 0 авто;
6 максимальная ширина: 400 пикселей;
7}
Также обратите внимание, что мы добавили стили для выравнивания содержимого страницы по центру.
Создание компонентов входа и регистрации
Теперь давайте создадим компоненты Login и Registration с помощью BlueprintJS:
Login.js
1импортировать {Button, FormGroup, InputGroup} из "@blueprintjs/core"
2импортировать React, {useState} из "реагировать"
3
4const Login = () => {
5 const [email, setEmail] = useState("")
6 const [пароль, setPassword] = useState("")
7
8 return (
9 <>
10
31 >
32 )
33}
34
35экспорт по умолчанию Логин
Здесь у нас есть поля имени пользователя и пароля и кнопка отправки.Мы используем локальные состояния для хранения значения электронной почты и пароля и мы подключили их к обработчикам изменений.
Добавим поля для формы:
index.css
1@import "~normalize.css";
4body {
5 поле: 0 авто;
6 максимальная ширина: 400 пикселей;
7}
8
9.auth-form {
10 margin-top: 10px;
11}
Аналогично создадим страницу регистрации:
Регистр.js
1импортировать {Button, FormGroup, InputGroup} из "@blueprintjs/core"
2импортировать React, {useState} из "реагировать"
3
4const Register = () => {
5 const [firstName, setFirstName] = useState("")
6 const [lastName, setLastName] = useState("")
7 const [email, setEmail] = useState("")
8 const [пароль, setPassword] = useState("")
9
10 return (
11 <>
12
49 >
50 )
51}
53экспорт по умолчанию Регистр
Теперь в приложении
.js
, давайте включим компоненты входа и регистрации:App.js
1import { Card, Tab, Tabs } from "@blueprintjs/core"
2import { useState } from "react"
3import Login from "./Login"
4import Register from "./ Регистрация"
5
6function App() {
7 const [currentTab, setCurrentTab] = useState («логин»)
8
9 return (
10
11 <Вкладки onChange={setCurrentTab} selectedTabId={currentTab}>
12
} /> 13
} /> 14
15
16
17 )
18}
19
20экспорт приложения по умолчанию
Здесь мы используем компонент Tabs из BlueprintJS вместе с локальное состояние реакции, чтобы определить текущую активную вкладку.
Если вы откроете http://localhost:3000/ в своем браузере, вы сможете переключаться между формами входа и регистрации:
Создание пользовательского контекста
Прежде чем мы отправим формы входа и регистрации, давайте создадим настраиваемый контекст реагирования для хранения токена пользователя и сведений.В моем предыдущем посте я объяснил, как создать и использовать контекст реакции для управления состоянием.
Создайте папку с именем
context
и файл с именемUserContext.js
внутри нее:UserContext.js
1импортировать React, {useState} из "реагировать"
2
3const UserContext = React.createContext([{}, () => {}])
4
5let InitialState = {}
6
7const UserProvider = props => {
8 const [состояние, setState] = useState (initialState)
9
10 возврат (
11
12 {props.children}
13
14 )
15}
16
17экспорт {UserContext, UserProvider}
Добавьте поставщика в
index.js
:index.js
1импортировать React из "реагировать"
2импортировать ReactDOM из "реагировать-дом"
3импортировать "./index.css"
4импортировать приложение из "./App"
50002Userimport} "./контекст/Контекст пользователя"6
70003
7REACTDOD.RUNDER (
8
9
10
11
11
12 ,
13 document.getelementbyId ("корень")
14)
Отправка форм входа и регистрации:
Теперь давайте привяжем обработчик отправки к нашей форме входа:
Login.js
1импортировать {Button, Callout, FormGroup, InputGroup} из "@blueprintjs/core"
2импортировать React, {useContext, useState} из "реагировать"
3импортировать {UserContext} из "./контекст/Контекст пользователя"
4
5const Login = () => {
6 const [isSubmitting, setIsSubmitting] = useState(false)
7 const [ошибка, setError] = useState("")
8 const [email, setEmail] = useState ("")
9 const [пароль, setPassword] = useState ("")
10 const [userContext, setUserContext] = useContext(UserContext)
11
12 const formSubmitHandler = e => {
13 e.preventDefault()
14 setIsSubmitting(true)
15 setError("")
16
17 const genericErrorMessage = "Что-то пошло не так! Повторите попытку позже."
18
19 fetch(process.env.REACT_APP_API_ENDPOINT + "users/login", {
20 метод: "POST",
21 учетные данные: "include",
22 заголовки: { "Content-Type": "application /json" },
23 тело: JSON.stringify({имя пользователя: электронная почта, пароль}),
24 })
25 .then(асинхронный ответ => {
26 setIsSubmitting(false)
27 if (!response.ok) {
28 если (ответ.status === 400) {
29 setError("Пожалуйста, заполните все поля правильно!")
30 } else if (response.status === 401) {
31 setError("Неверная комбинация адреса электронной почты и пароля. ")
32 } else {
33 setError(genericErrorMessage)
34 }
35 } else {
36 const data = await response.json()
37 setUserContext(old { ...oldvalues, токен: data.token}
39})
40}
40}
41})
41})
42 .Catch (ошибка => {
43 setissubmittion (false)
44 seteleror (genericerrormessage)
45 })
46 }
47 return (
48 <>
49 {ошибка &&
{ошибка} }50
77 >
70 3 ) 900}
80
81экспорт по умолчанию Логин
В приведенном выше коде
- Мы добавили два дополнительных локальных состояния.
- Во-первых,
isSubmitting
используется для отключения кнопки входа, когда пользователь уже нажал ее. Он также используется для отображения текста «Вход в систему», чтобы информировать пользователя о том, что происходит. - У нас есть состояние ошибки, которое используется для отображения пользователю соответствующего сообщения об ошибке в случае сбоя входа в систему.
- В
formSubmitHandler
мы отключаем отправку формы по умолчанию, используяe.preventDefault()
. - Мы делаем POST-вызов конечной точке
/users/login
, созданной ранее в серверном проекте с параметры имени пользователя и пароля в теле запроса. - В случае каких-либо ошибок мы устанавливаем соответствующее сообщение об ошибке, используя функцию
setError
. - При успешном входе в систему значение токена будет сохранено в контексте пользователя.
Мы не выполняем проверку имени пользователя и пароля на стороне клиента, учитывая объем сообщения. Я написал статью о том, как выполнить проверку формы в реакции.
Не забудьте добавить переменную среды
.REACT_APP_API_ENDPOINT
в.env
и перезапустите клиентский проект. Он будет иметь URL-адрес сервера в качестве значения:.env
1REACT_APP_API_ENDPOINT = http://localhost:8081/
Если у вас несколько сред, таких как dev, qa, stage, prod и т. д., и хотите увидеть, как вы можете установить несколько переменных среды, вы можете прочитать эту статью.
Теперь, если вы нажмете на вход с действительными учетными данными и зарегистрируете
userContext
вLogin.js
на консоли, вы сможете увидеть токен:Аналогичным образом добавьте обработчик отправки в регистрационную форму:
Регистр.js
1import {Button, Callout, FormGroup, InputGroup} из "@blueprintjs/core"
2import React, {useContext, useState} из "react"
3import {UserContext} из "./context/UserContext"
4
5const Register = () => {
6 const [isSubmitting, setIsSubmitting] = useState(false)
7 const [ошибка, setError] = useState("")
8 const [firstName, setFirstName] = useState ("")
9 const [lastName, setLastName] = useState ("")
10 const [email, setEmail] = useState ("")
11 const [пароль, setPassword] = useState ("")
12 const [userContext, setUserContext] = useContext(UserContext)
13
14 const formSubmitHandler = e => {
15 e.preventDefault()
16 setIsSubmitting(true)
17 setError("")
18
19 const genericErrorMessage = "Что-то пошло не так! Повторите попытку позже."
20
21 fetch(process.env.REACT_APP_API_ENDPOINT + "users/signup", {
22 метод: "POST",
23 учетные данные: "include",
24 заголовки: { "Content-Type": "application /json" },
25 body: JSON.stringify({ firstName, lastName, username: email, password }),
26 })
27 .then(async response => {
28 setIsSubmitting(false)
29 if (!response.ok) {
30 if (response.status === 400) {
31 setError("Пожалуйста, заполните все поля правильно!")
32 } else if (response.status === 401) {
33 setError("Неверная комбинация адреса электронной почты и пароля.")
34 } else if (response.status === 500) {
35 console.log(ответ)
36 константные данные = ожидание ответа.json()
37 if (data.message) setError(data.message || genericErrorMessage)
38 } else {
39 setError(genericErrorMessage)
40 }
41 } data = {
3 90 const await response.json()
43 setUserContext(oldValues => {
44 return { ...oldValues, token: data.token }
45 })
46 }
47 })
4 900.0.catch (ошибка => {
49 setIsSubmitting (false)
50 setError (genericErrorMessage)
51 })
52 }
53
54 возврат (
55 <>
56 {ошибка && <Выноска намерение="опасность">{ошибка}}
57
58
- 🛠️️
- Passport Стратегии Google и Twitter
- Обработка файлов cookie и защищенных маршрутов
- Обработка ошибок
** Обратите внимание, что они не обязательно расположены по порядку.
В этом проекте мы настроим наш проект для использования импорта JavaScript ES6 и добавим промежуточное ПО для обработки ошибок.
Что такое паспорт?
Проще говоря, Passport — это промежуточное программное обеспечение, которое обрабатывает аутентификацию (регистрацию и вход в систему) и авторизацию (доступ к защищенным маршрутам) для вашего приложения. Помимо этих двух функций, Passport не мешает работе вашего приложения — другими словами, он «беспрепятственный».
Passport обрабатывает аутентификацию двумя способами: сеансами и сеансами на стороне сервера. В этой статье мы будем использовать JWT. Чтобы узнать больше о разнице между этими двумя, вы можете проверить эту ветку переполнения стека.
Приступим:
Ваш набор инструментов
На вашем компьютере должен быть установлен NodeJS. Вы можете следовать этому руководству, чтобы настроить его. У вас также должен быть установлен MongoDB (или вместо этого вы можете создать учетную запись Mongoose Atlas).
Настройка папки
Создайте папку проекта, cd
в нее и инициализируйте новый пакет с помощью npm init -y
. Ваша папка должна содержать файл package.json. Создайте папку src
и следуйте приведенной ниже структуре папок.
├──SRC├──SRC
├───DB
├───Controllers
├───HELPERS
├───middleware
├────ODELS
└───ROUTES
├───mODELS
└ ───services
index.js
app.jsВы, наверное, согласитесь со мной, что
import
иexport
выглядят лучше, чемтребуют модулей
и.exports
, поэтому давайте настроим Babel, чтобы наше приложение могло использовать синтаксис импорта ES6.В терминале (убедитесь, что на этот раз вы находитесь в корневой папке, а не в папке src) выполните следующие команды:
npm i @babel/register @babel/runtimenpm i -D @babel/cli @ babel/core @babel/node @babel/preset-envЕще в корневой папке создайте файл
.babelrc
и вставьте в него следующий код{
"presets": [
[
"@babel /preset-env",
{
"useBuiltIns": "usage",
"corejs": 3
}
]
]
}После правильной настройки babel пришло время поработать в папке
src
.Во-первых, нам нужно установить еще несколько зависимостей:
npm i express cookie-parser cross-env debug dotenv morgan nodemonИ затем немного обработки ошибок
3 Мы напишем функцию для перехвата асинхронных ошибок, другой для обработки ошибок и сообщений об ошибках в зависимости от нашей среды, а затем мы напишем несколько классов, расширяющих класс JavaScript Error, чтобы сделать наши сообщения об ошибках более конкретными.
Catch Async Errors
Создайте новый файл в папке промежуточного ПО с именем
catchAsync.js
и скопируйте в него следующий код.В той же папке промежуточного ПО создайте файл
errorHandler.js
и добавьте следующий код:И, наконец, для наших классов ошибок создайте файл
errors.js
в папке помощников. Это должно выглядеть так:На данный момент у нас есть только два класса ошибок, но при необходимости мы можем увеличить их.
Затем скопируйте следующий код в файл app.js.
Наконец, в наш файл index.js мы импортируем наше приложение.js и создайте HTTP-сервер.
Теперь создайте файл
.env
в корневой папке и настройте переменные среды.PORT=5000
NODE_ENV=developmentДальше идут сценарии! Нет, не несколько версий группы, а ваши сценарии package.json для запуска вашего приложения. Мы создадим сценарии
dev
,start
,build
,clean
иbuild-babel
, чтобы мы могли запускать наше приложение в среде разработки или в рабочей среде.В файле package.json добавьте в свойство scripts следующие команды:
"build": "npm run clean && npm run build-babel",
"build-babel": "babel -d ./build ./src -s",
"clean": "rm -rf .nyc_output покрытие сборки && mkdir build",
"dev": "cross-env DEBUG=dev nodemon --exec babel-node src/index.js" ,
"start": "node ./build/index.js",
- Сценарий
dev
запускает ваше приложение в режиме разработки, который мы и будем использовать. - Сценарий сборки компилирует ваше приложение в папку сборки, преобразуя код ES6+ в обратно совместимую версию JavaScript в текущей и более старых средах.
- Стартовый сценарий запускает скомпилированное приложение NodeJS.
Во второй статье мы интегрируем базу данных MongoDB и настроим PassportJS в нашем приложении.
Этот проект доступен на GitHub , вы также можете подписаться на меня в Twitter .
Создайте систему входа в Node.js. Как использовать Passport.js для пользователя… | by Hussain Arif
Пользовательская схема и модель
Как обычно, перед созданием документов и их сохранением в базе данных необходимо определить схему. Сначала создайте каталог models
и создайте там файл с именем user.js
таким образом, чтобы он был models/user.js
. Во-первых, давайте создадим схему в user.js
. Далее мы создадим модель из этой схемы.
В models/user.js
:
Это означает, что ваша модель будет иметь имя, адрес электронной почты, связанный с ней пароль и дату создания.
В строке 20
мы используем эту схему в вашей модели User
. Все ваши пользователи будут иметь данные в этом формате.
Обработка POST-запроса к каталогу реестра: проверки
На этом шаге вы создадите документ в базе данных MongoDB с данными, предоставленными клиентом.
В начале файла route/users.js
импортируйте библиотеку Mongoose и импортируйте только что созданную модель User
.
const User = require("../models/user.js")
Теперь в файле route/users.js
найдите следующий фрагмент кода:
Внутри этого дескриптора , напишите следующий код:
-
Строка 1
: извлечение значений из элементов формы. Вы вынимаете почту, имя пользователя, его пароль. Последнее поле (password2
) является проверкой, чтобы убедиться, что пользователь подтвердил правильность вводимого им пароля. -
Строки 4-6
: Если какое-либо из полей не заполнено, добавьте соответствующее сообщение в массивerror
. -
Строки 8–10
: Если пароли не совпадают, добавьте соответствующее сообщение в массивerror
. -
Строки 13–15
: Проверьте, содержит ли пароль не менее шести символов. -
Строки 16–23
: Если присутствует какое-либо содержимое в массивеerror
, повторно визуализируйте регистр.ejs
, а затем отправьте соответствующие данные вместе с массивом ошибок -
Строки 24–36
: Вы успешно прошли проверку! Теперь вы сначала узнаете, есть ли уже пользователь в базе данных по электронной почте. Если есть, то вы повторно отобразите страницуregister.ejs
и отобразите соответствующую ошибку. В противном случае создайте нового пользователя с указанным адресом электронной почты, именем и соответствующим паролем.Имейте в виду, что вы еще не сохранили его. Вы сохраните его после шифрования пароля.
В качестве примера запустим код и введем односимвольный пароль, чтобы он перерендерил страницу:
Вывод кода после намеренного ввода неправильных параметров Теперь вам нужно отобразить ошибки, т.е. , отобразите содержимое массива ошибок
.
Отображение ошибок
Теперь перейдите к views/register.ejs
и найдите следующий фрагмент кода (это будет примерно в начале файла):
Когда вы его найдете, напишите следующую строку прямо под этим тегом h2
:
<%- include ('./partials/messages') %>
Эта строка означает импорт нового файла, который поможет отображать сообщения.
Перейдите в каталог views
, создайте новый каталог с именем partials
и внутри partials
создайте файл с именем messages.ejs
. Там напишите следующий код.
просмотров/частей/сообщений.ejs
<% if(typeof errors!= 'undefined') { %>
<% errors.forEach(function(error){ %>
<%= error.msg %>
<% }) %>
<% } %>
Этот код говорит, что если есть какие-либо ошибки, то отображать содержимое массива с его собственным элементом абзаца ( p
).
Повторно запустите код и напишите односимвольный пароль. Это будет вывод:
Обратите внимание, что вы теперь отобразили сообщение об ошибкеЕсли вы оставите какое-либо из полей пустым, вы получите следующее сообщение об ошибке:
В этой форме отображаются два сообщения об ошибкеЗаставьте оба поля пароля содержать разные значения :
В этой форме отображаются три сообщения об ошибкахОбработка POST-запросов к реестру: сохранение пользователей в базе данных
На этом шаге вы сохраните зарегистрированных пользователей в базе данных MongoDB.Сначала вы зашифруете их пароли, а затем сохраните их в базе данных.
В route/users.js
найдите следующий фрагмент кода:
В этом блоке else
напишите следующий фрагмент кода:
И на этой ноте завершите еще
утверждение здесь.
-
Строки 2–7
: Генерация соли, хэш пароля пользователя. Назначьте это зашифрованное значение паролю пользователя, а затем сохраните клиента в базе данных. -
Строка 10
: Когда документ будет сохранен без ошибок, перенаправьте пользователя в каталогlogin
, где пользователь теперь войдет в систему со своими учетными данными.
Это будет вывод кода, когда вы зарегистрируетесь в качестве пользователя:
Вывод кодаПоскольку вы вышли из системы из содержимого документа в своей консоли, вот вывод в консоли:
Содержание документа newUserВведите зарегистрированный адрес электронной почты. Как и ожидалось, вы получаете сообщение об ошибке, говорящее о том, что электронное письмо уже сохранено:
Вывод кода, показывающий, что у вас есть ошибкаНа этом шаге вы, наконец, сохранили пользователей в базе данных.