Авторизация в React-приложении с Firebase и Redux-Toolkit

Sdílet
Vložit
  • čas přidán 27. 07. 2024
  • Регистрация и авторизация через Google Firebase в React-приложении с использованием Redux-Toolkit. В версиях JavaScript и TypeScript.
    Код из видео github.com/michey85/auth-reac...
    00:00 Постановка задачи
    01:29 Зависимости проекта
    02:32 Настройка роутинга
    07:04 Redux стор и слайс
    11:26 Кастомный хук useAuth
    12:53 Подключение Firebase
    17:47 Компоненты с формами
    20:45 Логика авторизации и регистрации
    35:49 Рефакторинг для TypeScript
    Мои курсы по вебу с купонами:
    ✅ mishanep.com/
    📢 Поддержка канала:
    www.tinkoff.ru/rm/nepomnyasch...
    paypal.me/mishanep

Komentáře • 212

  • @TheS68123
    @TheS68123 Před 5 měsíci +4

    Была бы номинация для лучшего русскоязычного блогера. Я бы точно голосовал за Михаила Непомнящего. То что вы делаете, это бесценная информация!

  • @user-le7jy4ow8n
    @user-le7jy4ow8n Před 2 lety +23

    Спасибо что дал общее понимание как работает цепочка firebase - redux - react :)
    Развиваемся! 👍🏻💪🏼🎉

  • @user-dh7lx7lt2p
    @user-dh7lx7lt2p Před 2 lety +1

    Долго искал подходящий вариант регистрации, наконец-то нашел! Спасибо большое за видео)

  • @Sylar7773
    @Sylar7773 Před 2 lety +5

    Смотрю Ваш контент и поражаюсь как круто Вы учите. Огромное спасибо

  • @denissavast
    @denissavast Před rokem +2

    Благодарю за отличнейшую работу и подачу материала!

  • @user-dd5zs3nj6n
    @user-dd5zs3nj6n Před rokem +2

    Огромное спасибо благодаря вашим роликам можно узнать очень много полезного )

  • @user-ub9oh3ig9w
    @user-ub9oh3ig9w Před 2 lety +1

    Спасибо за ваш труд, очень интересно, пробую повторить :)

  • @mikhailrypta4779
    @mikhailrypta4779 Před 2 lety +3

    Спасибо за столь полезные видосы по Реакту :)

  • @andteslenko
    @andteslenko Před 2 lety

    Спасибо большое. с удовольствием смотрю твои видео, все просто и понятно)

  • @konglomora3230
    @konglomora3230 Před 2 lety +2

    Прям то что мне сейчас нужно, спасибо!!!

  • @idpliev
    @idpliev Před měsícem

    Суперприятно слушать, отличная подача, манера, затягивает невероятно, спасибо!

  • @dimalukashenko4865
    @dimalukashenko4865 Před 2 lety +1

    Спасибо, очень интересно и доступно.

  • @xdayx53
    @xdayx53 Před 4 měsíci

    Пушка, Михаил, просто пушка. Вы мне этот react, redux тупо вдолбили, спасибо)

  • @user-rp8oy2kf5d
    @user-rp8oy2kf5d Před rokem +1

    Михаил спасибо. Многому научился благодаря твоим видосам

  • @user-vm2db5cq1g
    @user-vm2db5cq1g Před rokem +1

    Очень крутой канал! весь контент на высоте! Спасибо Михаил, продолжайте в том же духе))

  • @evgeniybelkovskiy4896
    @evgeniybelkovskiy4896 Před 2 lety

    Благо дарим, Михаил!!! Удачи Вам!

  • @user-ht4es2nw7k
    @user-ht4es2nw7k Před 2 lety +1

    Круто! Спасибо за урок!

  • @eg128
    @eg128 Před 2 lety +2

    Спасибо большое за видео. Очень полезно и подробно. А будет видео, где можно получать данные получать данные,которые пользователь добавил в бд(к примеру у каждого пользователя возможность на сайте добавить закладки, они хранятся в firebase и при авторизации, каждый пользователь будет получать свои закладки)

  • @MrMomomoy
    @MrMomomoy Před 2 lety +2

    Михаил, спасибо за видео. Может снимете еще видео про авторизацию с помощью гугл аккаунта или соцсетей? думаю, многим такое будет интересно.

  • @mishanep
    @mishanep  Před 2 lety +24

    С момента записи видео успел обновиться react-router-dom. Поэтому дабы повторение кода по видео работало, надо установить пятую версию данной библиотеки. Для шестой версии роутинга решил записать отдельный цикл видео, первое из цикла czcams.com/video/0auS9DNTmzE/video.html

    • @shoxerpetrosyan8678
      @shoxerpetrosyan8678 Před 2 lety +1

      Спасибо за видео,очень все подробно.....подскажите пожалуйста, какое видео по редакс посмотреть.

    • @mishanep
      @mishanep  Před 2 lety

      @@shoxerpetrosyan8678 czcams.com/video/C0fBnil_Im4/video.html вот это =)

    • @shoxerpetrosyan8678
      @shoxerpetrosyan8678 Před 2 lety

      @@mishanep Спасибо за обратную связь

    • @melsvagharshyan
      @melsvagharshyan Před rokem

      @@shoxerpetrosyan8678 Barev Dzez, im mot chi asxhatum, grum a invalid API key, inchich klini?

    • @FilmsMediaTV
      @FilmsMediaTV Před rokem +1

      А как сейчас используется Redirect ?

  • @from_brest2631
    @from_brest2631 Před 2 lety +1

    Лайк и смотрим

  • @_SPIRICH_
    @_SPIRICH_ Před rokem

    Спасибо большое!

  • @1Chitus
    @1Chitus Před rokem +1

    Очень крутой канал!

  • @awenn2015
    @awenn2015 Před 2 lety

    О, вовремя , щас глянемс

  • @LuckyLucky-vq5lt
    @LuckyLucky-vq5lt Před rokem

    Спасибо!!!

  • @black_light
    @black_light Před 4 měsíci

    Супер. Спустя два года код не изменился)

  • @user-xq8qk7ss8i
    @user-xq8qk7ss8i Před 2 lety +19

    Пара ложек дёгтя к ролику. Если где я ошибся - пожалуйста прокомментируйте.
    1) Сама идея определять залогинен ли пользователь чисто по данным из store ошибочна. Данные в store не могут в текущем виде являться этому подтверждением. Актуальность этих данных необходимо контролировать. Для этого можно использовать хук onAuthStateChanged из библиотеки firebase/auth.
    2) Так же удаление данных о пользователе из store не является фактом того, что сессия авторизации закрыта в том числе и на сервере базы данных. Логаут на сервере можно выполнять с помощью метода signOut из библиотеки firebase/auth.
    Пожелание. Есть специализированная библиотека react-redux-firebase. Было бы здорово, если бы в теме про react и firebase рассказали стоит ли её использовать в сравнении с официальным SDK firebase.
    Вместе с тем хочу отметить, что ваши ролики о redux-toolkit - это лучшее, что мне удалось найти на русском языке. Поэтому буду благодарен, если в своих роликах, где используется redux-toolkit, также будете использовать библиотеку redux-persist или её специализированный форк reduxjs-toolkit-persist, или другой способ кеширования. А то уж слишком часто приходится бороться с ошибками из-за redux-persist.

    • @zipri9576
      @zipri9576 Před 2 lety

      то есть при создании auth в приложении не обязательно создавать для этого редьюсер - можно обойтись чисто функциями firebase?

    • @crn05
      @crn05 Před rokem

      @@zipri9576 по идее состояние "залогиненности" должно где-то сохраняться, вместо того, чтобы при каждом роуте дергать firebase. Как вариант можно использовать context, вместо редакса.

    • @alext5030
      @alext5030 Před 10 měsíci

      "onAuthStateChanged". Это, конечно, круто, но в большинстве случаев имеешь дело с самопальным бекендом, у которого ничего такого нет в принципе. А от идей типа "в любой непонятной ситуации отправляй запрос на бекенд" нужно жестко отучать. У JWT токенов есть exp date. Вот её и нужно проверять, а если протух - удалять из стора и local storage. Для роутинга этого достаточно. Дальше - по обстановке, в зависимости от того, применяется ли refresh token, например. Базовый вариант (без refresh token) - редирект на страницу логина.
      Но дергать бекенд при каждом переходе по роуту - это дичь.

  • @muhammadsalam-dev
    @muhammadsalam-dev Před rokem

    Супер, саул

  • @Johnny-rn8fb
    @Johnny-rn8fb Před 2 lety

    oчень крутое видео

  • @jazgulshamuratova-gf8zh
    @jazgulshamuratova-gf8zh Před 6 měsíci

    Молодец

  • @powersx1322
    @powersx1322 Před 7 měsíci +2

    4:05
    на 2023 год код должен выглядеть так



    5:12 код должен выглядеть так
    const HomePage = () => {
    return (

    HomePage


    );
    };

  • @finnik5994
    @finnik5994 Před rokem +2

    у тебя есть классный туториал по реакт роутингу, и оттуда ссылка на этот урок, когда ты делаешь авторизацию. Было бы здорово, если бы ты сделал новый урок, который бы расширил тот (с реакт роутингом), так как в этом используется синтаксис старого роутера.

    • @Aleksandr_Bolshakov
      @Aleksandr_Bolshakov Před rokem

      Поддерживаю, вот именно сейчас настраиваю роутинг к авторизации, правда вместо redux использую mst

    • @user-zp8cw7di6n
      @user-zp8cw7di6n Před 10 měsíci +3

      Ребята,я даю совет, который мне дали месяца два назад. Может вы не просили, но мне помог, авось вам тоже. Учитесь использовать новый синтаксис сами. Иначе вы будете выпадать постоянно на роботе, искать видосы по использованию нового синтаксиса- это куча времени, которое должно идти на совсем другого рода роботу. П.С. Читайте документацию, то очень много и подробно описано, по роутингу там буквально свитч изменился и exact кажется. Все остальное Вам пока не понадобиться. П.С.С. Я тоже так же искал, а потом прозрел, используя документацию, вы учитесь быстрее, нежели на ютуб видосах.

  • @whicencer8819
    @whicencer8819 Před 2 lety +2

    Здравствуйте Михаил. Вопрос: куда можно вынести эти действия которые мы делаем в handler'e нажатия на кнопку? Чтобы не нагромаждать сильно код в компоненте.
    (я про саму логику авторизации. когда мы в функции обработчике вызываем все эти методы авторизации)

    • @mishanep
      @mishanep  Před 2 lety +1

      Я деталей из видео уже не помню, но когда мы говорим про реакт компоненты и вынос логики, то лучшее решение - кастомный хук. Он может, например, возвращать только хэндлер.

  • @danil_rotan
    @danil_rotan Před 2 lety

    Добрый день, Михаил! Спасибо за урок! Подскажите пожалуйста, у меня перекидывает на страницу с "Welcome", только после второго входа. Первый вход записались данные в state, и только со второго он их читает и понимает, что у нас есть пользователь и условие в HomePage срабатывает. В чем может быть проблема?

  • @Zreus-ry9el
    @Zreus-ry9el Před 8 měsíci

    Классное видео. А есть гайд где объясняется как создать базу данных привязанную к конкретному пользователю в firebase?

  • @edgeofeternity85
    @edgeofeternity85 Před rokem +3

    FirebaseError: Firebase: Error (auth/network-request-failed). VPN не помогает, все равно ошибка остается, все проверил, никак не исправлется(

  • @andreyf6728
    @andreyf6728 Před 2 lety +1

    const user = await signInWithEmailAndPassword(auth, email, password);
    const newUser = user as unknown as OAuthCredential;
    в newUser уже будет доступен accessToken

  • @braivs
    @braivs Před 2 lety

    Пожалуйста сними RTK Query + Firebase =)

  • @samano4619
    @samano4619 Před 4 měsíci

    найс

  • @approximation9294
    @approximation9294 Před 2 lety +6

    Огромное спасибо! А планируется что-нибудь по SSR?

    • @mishanep
      @mishanep  Před 2 lety

      Со временем запишу. Видел на соседнем канале цикл по NextJS идёт, поэтому пока повторяться не хочется.

    • @FlashViolet
      @FlashViolet Před 2 lety

      @@mishanep не подскажешь название соседа?)

    • @mishanep
      @mishanep  Před 2 lety +1

      Да, запросто czcams.com/video/M1Y7JmaslkU/video.html&ab_channel=webDev

  • @nikitashevyakov3057
    @nikitashevyakov3057 Před 2 měsíci

    Михаил, спасибо большое за время и труд! Мне кажется подход раскрыт не до конца. Есть минус вашего подхода, который не сразу понятен.
    Сам минус: Что будет если авторизованный юзер откроет ещё вкладку? Будет то, что стейт в редаксе пуст, нужно логиниться заново.
    Вопрос: Как измениться подход авторизации при множественном выборе вкладок в сравнении с данным проектом? Хранить ли информацию о юзере и токенах в редаксе или же использовать localStorage?
    Буду признателен за ответ.
    PS. Ролик сделан на высшем уровне

  • @nikitaermolenko7813
    @nikitaermolenko7813 Před rokem +1

    Окей, а как работает то, чтобы например юзер регается - входит и у него своя личная инфа на сайте? Допустим, личный список задач, а у другого юзера другой - свой список задач уже, это автоматом определяется уже на firebase или ручками как-то?:)

  • @muradkhanibragimov1353

    Михаил, здравствуйте! Простите за небольшой оффтоп, очень интересно узнать название пака иконок, которую Вы используете в vscode, подскажите пожалуйста ?

  • @user-tf4wv5ez6c
    @user-tf4wv5ez6c Před 2 lety +1

    Михаил добрый день)Скажите пожалуйста у меня немного не по теме и достаточно спецефический вопрос)Возможно ли стать React Native разработчиком, понимая неплохо реакт но не имея коммерческого опыта по реакту!?...

    • @mishanep
      @mishanep  Před 2 lety

      Здравствуйте. Не работал с React Native, поэтому не могу ответить.

  • @user-qm6bt1rr3l
    @user-qm6bt1rr3l Před rokem +1

    Спасибо за видео, а есть такая возможность, чтобы добавить какие-то параметры у пользователя, допустим: аватарку и описания профиля, как это сделать ?

  • @alsunurlanova3451
    @alsunurlanova3451 Před 2 lety +1

    Было бы круто если бы вы сняли видео для обновленной версии react-router-dom

    • @mishanep
      @mishanep  Před 2 lety +2

      У меня есть отдельный плейлист с подробным разбором шестой версии react-router-dom.

  • @user-dh7lx7lt2p
    @user-dh7lx7lt2p Před rokem +1

    Можно сделать видео по добавлению cookie на данную регистрацию/авторизацию?

  • @user-gz4qu1bp2f
    @user-gz4qu1bp2f Před rokem

    При регистрации ошибка FirebaseError: Firebase: Need to provide options, when not being deployed to hosting via source. (app/no-options). Подскажите как исправить пожалуйста

  • @vegan_blade
    @vegan_blade Před rokem

    объясни пожалуйста в чем разница делать авторизацию твоим способом либо же через java spring. Пишу диплом и вот стоит выбор

  • @preslavgetov1330
    @preslavgetov1330 Před rokem +1

    Hello Sir, thank you for this tutorial. I am trying to implement writing an AsyncThunk middleware which works with all the methods that you have used - 'signInWithEmailAndPassword' for login for example. I noticed that you prefer to await the results and synchronously then dispatch your reducers. Do you have experience with doing the same but asynchronously with the async thunks? Thank you in advance!

  • @user-yr2ek5yp7x
    @user-yr2ek5yp7x Před rokem

    Нужно ли делать запросы в бд фаирбейза в санках? или в самих компонентах это норм подход?

  • @t.r.e.p3841
    @t.r.e.p3841 Před rokem

    Помогите пожалуйста, только что делал приложение по примеру, во-первых немного обновился роутер дом(6 версия), поэтому на главной странице redirect пришлось изменить на useNavigate, но теперь когда я авторизовываюсь, открывается главная страница, но при её обновлении пользователь как бы "стирается"(не авторизован) и вместо редиректа на страницу логина отображается пустая страница, т.е при обновлении страницы данные которые берутся из хука useAuth обнуляются и страница не рендерится. В консоли пишет что я должен использовать navigate в useEffect. Подскажите как исправить это

  • @izzy7541
    @izzy7541 Před 2 lety

    Слышал много про замену небольшого бека для фронтенда с помощью firebase'a. Сильно ли он ограничен по функционалу если сравнивать с бэком для среднего по объему интернет-магазина? Хочу попробовать сделать проект для себя, а в бэке я дуб дубом

    • @mishanep
      @mishanep  Před 2 lety +1

      Там есть несколько вариантов работы с базой данных со своими API. Можно как раз сочетать с авторизацией. Но я глубоко с firebase не работал, у меня есть определенные вопросы к нему. В ютубе есть примеры проектов интернет-магазинов на firebase, так что, вероятно, мои вопросы решаемы - вопрос времени и тщательного изучения документации.

  • @exe611
    @exe611 Před 3 měsíci

    У меня приложение просто превращается в белый экран, если в main.ts импортирую './firebase.ts'. С чем это связано? (на данный момент саму логику авторизации и регистрации, начиная с 20:46 как на видео, не делал, вдруг это влияет)

  • @trendsgallery
    @trendsgallery Před 11 měsíci

    А как правильно хранить авторизацию при перезагрузке, если localStorage и cookie - это небезопасно ?

  • @sovazavr4499
    @sovazavr4499 Před rokem

    Кто нибудь сталкивался с ошибкой на 27:00 "reducer" is a required argument, and must be a function or an object of functions that can be passed to combineReducers

  • @matveyd7272
    @matveyd7272 Před rokem +3

    В 6 версии react-router-dom хук useHistory не доступен.
    Вместо import { useHistory } from 'react-router-dom'
    Сделайте import { useNavigate } from 'react-router-dom';
    В компоненте:
    const navigate = useNavigate();
    И в функции:
    navigate('/')

    • @pelemehka99mvp61
      @pelemehka99mvp61 Před 6 měsíci

      с этими вправками тоже не работает(

  • @0NameOfShadow0
    @0NameOfShadow0 Před rokem

    Люди, кто знает как решить эту ошибку? export 'userReducer' (imported as 'userReducer') was not found in './slices/userSlice' (possible exports: default, removeUser, setUser)

  • @antonklochkov3416
    @antonklochkov3416 Před 2 lety

    Зашел в комментарии поискать информацию об интерцепторах токена, на функциях, но так и не нашел информации😢

  • @kenn2ki
    @kenn2ki Před 8 měsíci

    Михаил, будет ли обновленная авторизация на Route 6?

  • @bless_meparde4913
    @bless_meparde4913 Před 2 lety

    Может подскажете, почему компонент Form это div. Там 2 инпута и кнопка. И если заменить на div на form то авторизация перестает работать

    • @mishanep
      @mishanep  Před 2 lety +1

      Скорее всего у вас форма просто отправляется штатным образом, т.е. с перезагрузкой страницы. Если отменить это поведение, то должно вести себя также как div. Собственно, div использован для упрощения.

  • @DirtyKalach
    @DirtyKalach Před rokem

    Здравствуйте, спасибо большое, использовал ваше видео для реализации пет проекта. Всё предельно ясно, объясняете как бог ) один вопрос, у меня при вводе, пароль видимый, как это исправить?

    • @mishanep
      @mishanep  Před rokem +1

      Для инпута атрибут type должен равняться password

  • @DmitriyDev
    @DmitriyDev Před 2 lety

    а эти данные о пользователях можно скачать?

  • @user-xu4ob9pg7e
    @user-xu4ob9pg7e Před rokem

    Не знаете почему на этапе первого запуска(27:58) вот такая ошибка:
    FirebaseError: Firebase: Error (auth/user-not-found).?

    • @d4rax
      @d4rax Před rokem

      проверь свою страницу регистрации, возможно ты используешь не тот хук от файрбэйса типо signIN... либо createUser...

  • @user-mw4jj6vj4r
    @user-mw4jj6vj4r Před 2 lety

    Всем привет! можете кто нибудь сказать для чего нужен access token в firebase?

  • @black_light
    @black_light Před 4 měsíci

    После деплоя на vercel консоль выдает ошибку firebaseerror: firebase: error (auth/invalid-api-key)
    Upd: надо было на vercel переменные апишки отдельно импортировать.

  • @pro.game.
    @pro.game. Před měsícem

    Как называется расширение для снипитов React?

  • @fishko5346
    @fishko5346 Před 2 lety

    Подскажите пожалуйста, для чего нужен AppDispatch? что будет если использовать базовый useDispatch?

    • @mishanep
      @mishanep  Před 2 lety

      AppDispatch это типизированная версия хука. Можно не использовать. Но если typescript, то каждому хуку придётся тип указывать.

    • @fishko5346
      @fishko5346 Před 2 lety

      @@mishanep пытаюсь понять почему у нас нету проблем с использование базового dispatch:)

    • @mishanep
      @mishanep  Před 2 lety

      @@fishko5346 так это ж типизация, а не функционал. Автодополнение просто где-то не работает скорее всего))

  • @diokgg
    @diokgg Před rokem

    Добрый день! Скачал исходник, далее все настроил под себя, запустил проект, заполнил поле email и password нажимаю на кнопку register, после чего сайт тупо зависает не знаете в чем проблема?

    • @mishanep
      @mishanep  Před rokem

      Добрый день.
      Нет, не знаю. Надо смотреть консоль.

  • @poghoskeshishyan649
    @poghoskeshishyan649 Před rokem

    здравствуйте, можете снимать видео о react crud и авторизация вместе ???
    спасибо

  • @never.m1nd
    @never.m1nd Před měsícem

    a jwt токен есть возможность использовать в firebase? с куки я так понял он не работает?

  • @SeniorHuguenot
    @SeniorHuguenot Před rokem +2

    Некоторые компоненты в библиотеках были изменены с загрузки данного видео (ОБРАЩАЙТЕ НА ЭТО ВНИМАНИЕ)

  • @San-sd3bz
    @San-sd3bz Před rokem

    А что будет, если превысить лимиты бесплатные в firebase? Он перестанет запросы принимать?

  • @vadicus6534
    @vadicus6534 Před 2 lety

    Михаил, почему ты используешь формат файлов jsx, вместо js?

    • @mishanep
      @mishanep  Před 2 lety +2

      Потому что файлы содержат jsx разметку. И потому что такое расширение также даёт редактору знать, что сниппеты для разметки здесь тоже актуальны.

    • @vadicus6534
      @vadicus6534 Před 2 lety

      @@mishanep Спасибо!

  • @mortydollar7592
    @mortydollar7592 Před 2 lety +1

    Attempted import error: 'Switch' is not exported from 'react-router-dom'.
    Это из-за того, что у меня 6-ая версия react-router-dom, а в видео используется 5-ая?
    Подскажите, как решить данную проблему?

    • @mishanep
      @mishanep  Před 2 lety

      А импорт компонента Switch в файле присутствует?

    • @mishanep
      @mishanep  Před 2 lety

      Зависимости установлены?

    • @mortydollar7592
      @mortydollar7592 Před 2 lety +1

      @@mishanep Да, но насколько я понял в 6-ой версии react-router-dom он не поддерживается.

    • @mortydollar7592
      @mortydollar7592 Před 2 lety

      @@mishanep Да, установлены, однако при их установке в консоли выдаёт много ошибок в которых даже 2 критических присутствуют.. npm audit fix не решает проблему

    • @mishanep
      @mishanep  Před 2 lety

      Я бы начал поиски отсюда reactrouter.com/docs/en/v6/upgrading/v5
      Первое, что бросается в глаза, компонент Redirect больше нельзя использовать внутри Switch. Можно заменить редирект методом replace из хука useHistory.

  • @pseudonim510
    @pseudonim510 Před rokem +2

    Если у кого на Vite ругается на api key, то нужно данные забивать в таком формате: VITE_apiKey = и т. д.

    • @velikorossnationalist4259
      @velikorossnationalist4259 Před rokem

      А вместо process.env используете import.meta.env? Я вроде бы так сделал и VITE_...... указал, но ничего не поменялось((

    • @mashush9197
      @mashush9197 Před rokem

      вот-вот, сам долго с этим возился - заменил все process.env на import.meta.env, а также в самом файле .env.local прописал все ключи через VITE_. Ужасно, потратил на это целый час

    • @gnmgnomski3579
      @gnmgnomski3579 Před 9 měsíci

      тоже самое, но я вот думаю, а зачем собственно так делать, данные-то не секретные

  • @AisyluT
    @AisyluT Před rokem

    16:43
    про env

  • @rflwnq
    @rflwnq Před rokem

    как сделать чтобы при обновлении страницы не приходилось заново логиниться? если localStorage, то где и что нужно сохранить в него?

    • @mishanep
      @mishanep  Před rokem +1

      Есть разные подходы к этому вопросу. В любом случае решение будет идти в связке с бэкендом. Есть варианты хранить сессию в куках, она автоматом будет уходить на сервер при каждом запросе. Есть вариант хранения токена в localStorage и отправка этого токена в запросах за конкретными ресурсами.

    • @insafsuz8864
      @insafsuz8864 Před rokem

      Привет смог допилить этот не достаток? Если да то как?)

    • @ayaznamazov8328
      @ayaznamazov8328 Před 9 měsíci

      нашел ответ?
      @@insafsuz8864

  • @zulaikamahamatalieva7956

    Здраствуйте Михаил, я полностью переписала ваш код, на экран ничего не выходит, просто белый экран. Мне кажется он не может читать:
    const app = initializeApp(firebaseConfig);
    из firebase.js.
    что делать в таком случае?
    очень надеюсь на обратную связь))

    • @JackShepards
      @JackShepards Před rokem

      Нашли решение?

    • @diokgg
      @diokgg Před rokem

      @@JackShepards нашли решение? У меня апп is assigned but never used и зависате при нажатии на кнопку регистер

    • @JackShepards
      @JackShepards Před rokem

      @@diokgg нет. видео старое. решение проекта тоже старое

  • @user-kp2it3pw2q
    @user-kp2it3pw2q Před rokem

    А как сбросить пароль, кто может подсказать?

  • @David-zh2kh
    @David-zh2kh Před rokem

    ребят, если в тайпскрипт проект засунуть jsx, будет ли он работать?

    • @mishanep
      @mishanep  Před rokem +1

      Расширения файлов тогда должны быть .tsx

  • @user-fd1np4pt7y
    @user-fd1np4pt7y Před 11 měsíci

    прив. спасибо за видос. все круто.
    а как сделать так, чтобы при релоад страницы не нужно было опять вводить емейл и пароль?

    • @frolovv3
      @frolovv3 Před 11 měsíci

      привет. Сохраняй все в локал сторедж и когда страница будет релоудиться, то пушь данные с локал стораге в редакс. Можешь попробовать библиотеку react persist, которая сама сохраняет стор редакса в локал стораге

    • @user-fd1np4pt7y
      @user-fd1np4pt7y Před 11 měsíci

      @@frolovv3 спасибо. Попробую, отпишусь

  • @user-gd8hc1np4x
    @user-gd8hc1np4x Před 10 měsíci

    почему у вас внукция handleClick была не написана но у вас все еще работает?

    • @mishanep
      @mishanep  Před 10 měsíci

      Не понимаю о чем вы. Код сниппет набросайте, о котором идет речь.

  • @user-wi5tx7gy7u
    @user-wi5tx7gy7u Před rokem

    Uncaught TypeError: Cannot destructure property 'email' of '(0 , react_redux__WEBPACK_IMPORTED_MODULE_0__.useSelector)(...)' as it is undefined.

    • @mishanep
      @mishanep  Před rokem +1

      Выглядит так будто не создан редакс стор.

    • @user-wi5tx7gy7u
      @user-wi5tx7gy7u Před rokem

      @@mishanep спасибо большое , все исправил

  • @pseudonim510
    @pseudonim510 Před rokem

    У кого проблемы с accessToken создайте новый интерфейс и используйте его:
    export interface IUser extends User {
    accessToken: string;
    }

    • @mashush9197
      @mashush9197 Před rokem

      незачем городить такую конструкцию - вот что на эту тему мне написал YouChat:
      "В Firebase Authentication в версии SDK 9.0.0 была внесена некоторая путаница в терминах и методиках получения Access Token. До этого пользовательский доступный токен (Access Token) можно было получить через свойство accessToken объекта User."
      А также дополнил:
      "Однако в версии SDK 9.0.0 свойство accessToken было заменено на метод getIdToken(), который возвращает Promise с идентификатором токена доступа (Access Token ID). Новый метод getIdToken() позволяет получить актуальный токен доступа для конкретного пользователя, который может использоваться для доступа к другим сервисам Firebase API, а также имеет большую гибкость в отношении управления жизненным циклом токена доступа."

  • @danyildemyanyuk8182
    @danyildemyanyuk8182 Před 2 lety

    в чем может быть причина, что не могу залогиниться?

    • @mishanep
      @mishanep  Před 2 lety

      Можно залогинить ошибку и почитать её сообщение. Скорее всего пароль неверный. Либо firebase настроен некорректно.

  • @mustafoyakubov1198
    @mustafoyakubov1198 Před 2 lety

    Привет Михаил, подскажите как это исправить?
    FirebaseError: Firebase: Error (auth/network-request-failed).

    • @mishanep
      @mishanep  Před 2 lety

      Как знать, возможно сам Firebase блокирует запросы из вашего региона. Сейчас всё может быть. Можно попробовать из-под VPN.

    • @mustafoyakubov1198
      @mustafoyakubov1198 Před 2 lety

      @@mishanep Я включил vpn и теперь я получаю эту ошибку: Firebase: Error (auth/admin-restricted-operation).
      Я искал в Интернете, но я не мог найти ответ. Вы знаете решение?

    • @mishanep
      @mishanep  Před 2 lety

      @@mustafoyakubov1198 не сталкивался, потому решения нет.

    • @edgeofeternity85
      @edgeofeternity85 Před rokem

      Аналогичная проблема (

    • @awesomedud
      @awesomedud Před 10 měsíci

      привет, включи анонимный вход в настройках консоли firebase

  • @user-oc1pv8wq2g
    @user-oc1pv8wq2g Před rokem +1

    Если есть ошибка с элементом Redirect на странице, то замените его на Navigate

  • @user-lp8nd5cf4p
    @user-lp8nd5cf4p Před 4 měsíci

    Как сделать чтобы авторизация сохранялась после обновления страницы?

    • @mishanep
      @mishanep  Před 4 měsíci +1

      Хранить сессию в localstorage или sessionstorage

    • @user-lp8nd5cf4p
      @user-lp8nd5cf4p Před 4 měsíci

      @@mishanep понятно, но тут же используется firebase, зачем LS?

  • @gordarbinyan5478
    @gordarbinyan5478 Před rokem

    У меня аналогичная проблема Firebase: Error (auth/invalid-api-key).
    FirebaseError: Firebase: Error (auth/invalid-api-key).

    • @ayaznamazov8328
      @ayaznamazov8328 Před 9 měsíci

      как ее решить?

    • @user-hm9bs1ye3k
      @user-hm9bs1ye3k Před 6 měsíci

      @@ayaznamazov8328 Привет. Решил этот вопрос? Потому что мне не помог файл env.local, и все ключи с firebase пришлось хранить в открытом доступе, что не очень.

  • @razgildai8873
    @razgildai8873 Před 3 hodinami

    Ты брат Яна Непомнящего

  • @murderousvortex
    @murderousvortex Před 2 lety

    Кто-нибудь сталкивался с ошибкой : Firebase: Error (auth/network-request-failed)? Повторял всё по видео и показывает данную ошибку.Что делать?

    • @ruslanaliev2933
      @ruslanaliev2933 Před 2 lety

      Над этой ошибкой есть ещё строка с инфо об ошибке, что там?

    • @murderousvortex
      @murderousvortex Před 2 lety

      @@ruslanaliev2933 только это на красном фоне показывает

    • @ruslanaliev2933
      @ruslanaliev2933 Před 2 lety

      @@murderousvortex при настройке SDK, web выбрал или для мобильных? Если включен vpn попробуй отключить. Попробуй перезапустить приложение

    • @murderousvortex
      @murderousvortex Před 2 lety

      @@ruslanaliev2933 web
      Пробовал перезапускать

    • @ruslanaliev2933
      @ruslanaliev2933 Před 2 lety

      @@murderousvortex если есть репозиторий, скинь, посмотрю

  • @geniamasanin8322
    @geniamasanin8322 Před 2 lety

    А если будет рефреш страницы, юзер разлогинится?

    • @mishanep
      @mishanep  Před 2 lety

      В данном случае разлогиниться да. Как правило, то что мы храним в стейте, дополнительно кладётся в localStorage или sessionStorage. И оттуда initialState берётся, если там что-то есть. Соответственно при разлогинивании, сторедж вычищается.

    • @geniamasanin8322
      @geniamasanin8322 Před 2 lety

      @@mishanep Вроде у firebase есть функция чтобы проверить залогинен ли пользователь

    • @mishanep
      @mishanep  Před 2 lety

      Очень может быть, но не попадалась. Мне кажется здесь вопрос политики безопасности. В простейшем варианте кажется, что должно храниться в сторедже, чтобы не делать дополнительный запрос к серверу.

    • @nazario9537
      @nazario9537 Před 2 lety

      А как сделать так чтобы при рефреш страницы чтоб юзер не разлогинилс

    • @mishanep
      @mishanep  Před 2 lety

      @@nazario9537 нужно хранить состояние авторизации в localStorage и при инициализации js-приложения брать данные оттуда. Для redux здесь есть вариант автоматизации с библиотекой redux-persist. У меня есть соответствующий ролик про нее.

  • @dielokua84
    @dielokua84 Před 4 měsíci

    when you reload the page, you will be logged out of your account (this is a big minus

    • @mishanep
      @mishanep  Před 4 měsíci

      It's just a simple question of storing a user session to localStorage. I assumed that devs, who would watch this, are already familiar with persistence in a browser

  • @user-oh3zv3oj4m
    @user-oh3zv3oj4m Před 2 lety

    Разрешение видео очень плохое.. 360p всего

    • @____Olga__
      @____Olga__ Před 2 lety

      у меня HD

    • @mishanep
      @mishanep  Před 2 lety

      Ютубчик сегодня шалит. Полдня видео обрабатывал. Сейчас должно быть в HD.

    • @user-oh3zv3oj4m
      @user-oh3zv3oj4m Před 2 lety

      @@mishanep Все ок... и работа ваша отличная

  • @user-rz1hy7xg7o
    @user-rz1hy7xg7o Před 2 lety +1

    Честно, мало понимаю логику автора: писать асинхронные функции в компоненте а потом их диспатчить? Смысл тогда асинхронной логики Redux? Поверхностно показали примерчики из документации двух библиотек по отдельности, а связать их нормально так и не смогли. Я имею ввиду, что должны быть отдельные асинхронные actions, которые все бы делали не внутри React компонентов, а внутри redux логики. А это что? Мухи с котлетами кушать.
    А в документации firebase до onAuthStateChanged, похоже, автор даже не дочитал.
    Подгорело у меня знатно, видя, что человек учит так связывать redux и firebase. Лучше бы уже показал react-firebase-hooks.

    • @mishanep
      @mishanep  Před 2 lety +5

      Redux не обязует нас использовать всю логику приложения через себя. В данном случае вполне имеет место быть предложенное решение. Потом это бегиннерс гайд и уверен, многие получили пользу от его просмотра. Разумеется, от базового примера можно расширяться по самым разным нюансам, добавляя дополнительную логику, в том числе и через дополнительные инструменты. Но мешать всё в кучу смысла не вижу. Честно, мало понимаю логику хейтить бесплатный контент.

    • @user-rz1hy7xg7o
      @user-rz1hy7xg7o Před 2 lety

      @@mishanep хейта нету, я просто говорю что вижу. А вижу я, что связка redux-firebase работает, но все лежит в куче, а так никто не делает и такому учить не должен. Не зря же создали thunk, не зря же его требуют в объявлениях на работу, не зря же все пишут асинхронку в redux-thunk. Хотите может поспорить, что я не прав?

    • @mishanep
      @mishanep  Před 2 lety +3

      ​@@user-rz1hy7xg7o нет конечно, спорить смысла не вижу. Я вообще против споров в сети, так как они редко бывают направлены на поиск истины.
      У redux-thunk полно альтернатив, включая встроенные в сам redux-toolkit. Но опять же, это не исключает точечного использования хэндлеров без привязки к редаксу. Возможно в Реакте у нас слишком много свободы в плане выбора того, что и как делать, но спорить какой из подходов единственно верный было бы глупо. Мне видится куда полезнее собрать свой пример и выложить его в комментариях, нежели убеждать автора отказаться от своей манеры подачи.

    • @user-rz1hy7xg7o
      @user-rz1hy7xg7o Před 2 lety

      @@mishanep извините конечно, если вам показалось это грубо, но говорю, как вижу. Да, видос хороший, но только как отдельный поверхностный разбор Redux-toolkit и firebase-auth ПО ОТДЕЛЬНОСТИ. Но как вы их "связали", это глупо. Да, оно работает, но это неправильно по той простой причине, что вы засрали компоненту, которая не должна вообще видеть что-то из асинхронной логики. А представьте, если запрос в одном компоненте не один, а например 3. У большинства программистов просто кровь из глаз пойдёт от большого количества асинхронной логики в компанеете. Именно поэтому, так делать можно, но это плохо, очень плохо.

    • @FlashViolet
      @FlashViolet Před 2 lety +1

      @@user-rz1hy7xg7o можно вас попросить дать пример кода с правильной связкой?

  • @user-jt9lr7ev7b
    @user-jt9lr7ev7b Před 2 lety

    C токенами все же неясно, какой использовать в дальнейшем для работы с юзером. accessToken и refreshToken отличаются. Рефреш есть в типизации ответа, а вот accessToken приходится с тс брать через странную констуркцию const response: any = res.user.toJSON(), token: response.stsTokenManager.accessToken

    • @mishanep
      @mishanep  Před 2 lety

      Для работы нужен access token. Refresh используется для получения нового access токена, если прежний устарел.

  • @bless_meparde4913
    @bless_meparde4913 Před 2 lety +1

    Если кто-нибудь захочет использовать react-router-dom v. 6, то useHistioy замените на useNavigate "const navigate = useNavigate(); navigate("/");"

  • @user-wi5tx7gy7u
    @user-wi5tx7gy7u Před rokem

    В папке hooks.
    use-auth.js
    У меня v6 router
    Вопрос:
    const {email, token, id} = useSelector(state=> state.user); вот этот часть кода дает ошибку

    • @mishanep
      @mishanep  Před rokem +1

      Данный участок кода никак не связан с версией роутера.

    • @user-wi5tx7gy7u
      @user-wi5tx7gy7u Před rokem

      @@mishanep спасибо что ответили.