[МУЗЫКА]
Теперь, когда мы поняли необходимость обычной аутентификации в нашем
приложении Express, давайте приступим к упражнению, где мы добавим базовую
аутентификацию на сервер Mistration, который мы разрабатываем до сих пор,
сервер Express REST API.
По пути мы
узнаем, как мы можем использовать обычную аутентификацию на нашем сервере.
А затем в последующих упражнениях мы расширим эту идею и
добавим полноценный сервис аутентификации для нашего сервера Express REST API.
В этом упражнении мы перейдем на сервер Mistration,
над чем мы работали до сих пор.
Таким образом, вы должны завершить реализацию второго задания к
настоящему времени, где вы бы разработали промо-акции и модель лидеров.
А также обновлены маршруты для ведущего роутера и
промо-роутера в вашем серверном приложении UniCT.
Поэтому в этом коде давайте перейдем к app.js, а
затем добавим базовую аутентификацию в app.js.
Поэтому в app.js, как мы поняли о том
, как средний способ он работает в приложении Express.
Поэтому мы начинаем здесь, в app.js
, импортируя все различные модули узлов здесь.
И затем, после этого, мы начинаем здесь, сначала говоря app.use logger dev.
Таким образом, все это будет применено к нашей заявке.
И затем этот вызов здесь app.use (express.static)
- это то, что позволяет нам обслуживать статические данные из общей папки.
Теперь они хотят выполнить аутентификацию прямо перед тем
, как мы позволим клиенту получать данные с нашего сервера.
Так что прямо там, мы войдем и добавим значок аутентификации.
Таким образом, вы заметили, что все, что приходит после этого,
все промежуточное программное обеспечение, которое смонтировано и приходит после этой конкретной точки.
Мы должны пройти этап авторизации, прежде чем
это промежуточное программное обеспечение сможет получить доступ.
Поэтому прямо там я собираюсь добавить в app.use, а
затем добавить функцию под названием auth, которую я собираюсь реализовать прямо сейчас.
Таким образом, делая это, то, что мы указываем по умолчанию,
клиент может получить доступ к любому из них,
либо к своим статическим ресурсам в общей папке, либо к любым ресурсам,
блюдам, акциям или лидерам, или даже пользователям, как мы увидим позже.
Клиент должен быть сначала авторизован.
Так что прямо там, мы добавим в auth.
Поэтому позвольте мне добавить функцию здесь под названием auth прямо там.
А затем немедленно используйте его в нашем
приложении Express в качестве промежуточного программного обеспечения там.
Таким образом, эта функция, auth будет принимать три параметра:
объект запроса, объект ресурса и следующий объект, да.
Поэтому в этой функции позвольте мне сначала,
просто чтобы узнать, что содержится в заголовке запроса.
Позвольте мне просто записать заголовки запросов прямо там, чтобы продемонстрировать вам,
потому что как только вы добавите заголовок авторизации,
тогда мы хотим видеть его прямо там.
Поэтому мы сначала сделаем журнал консоли,
просто чтобы увидеть, что приходит со стороны клиента.
Затем позвольте мне получить их
заголовок авторизации, сказав
req.headers .authorization.
Таким образом, здесь мы получим заголовок авторизации, который добавляется
нашей клиентской стороной.
Если его нет, очевидно, то нам нужно действовать соответствующим образом.
Поэтому, если AuthHeader имеет значение null,
что означает, что в нашем входящем
запросе нет заголовка аутентификации, то, очевидно, наш клиент не включил имя пользователя и
пароль в заголовок аутентификации.
Поэтому мы должны бросить вызов нашему клиенту, чтобы предоставить эту информацию.
Поэтому, если заголовок авторизации равен нулю, то мы увидим,
var err новая ошибка,
поэтому мы не позволим нашему клиентскому запросу выходить дальше этой точки.
Так что мы скажем, вы не аутентифицированы,
и тогда мы вызовем клиента там.
Итак, мы скажем res.setHeader, поэтому
мы собираемся установить заголовок в
ответном сообщении, говорящем WWW-Authenticate,
и из лекции ранее,
вы увидите, почему мы помещаем это
в заголовок ответа.
И тогда мы скажем ошибочный статус.401.
401 - это несанкционированный доступ.
И тогда мы просто сгенерируем наш вызов рядом с заголовком.
Таким образом, это означает, что он пропустит все это и перейдет к
обработчику ошибок, где обработчик ошибок создаст ответное сообщение и
отправит обратно моему клиенту.
Таким образом, если клиент не включил заголовок аутентификации или
заголовок авторизации, то я собираюсь бросить вызов клиенту, чтобы
попросить его предоставить мне заголовок авторизации там.
Поэтому, если нет, я знаю, что заголовок авторизации существует.
Таким образом, помимо этого, мы скажем var auth,
и я собираюсь извлечь заголовок авторизации.
И затем, поскольку authHeader является строкой,
я собираюсь разделить это значение и
этот заголовок авторизации, я собираюсь разделить значение.
Таким образом, как вы можете видеть, буфер позволяет вам разделить значение, а
затем мы также даем кодировку буфера, который является кодировкой Base64 здесь.
Таким образом, мы преобразуем это в буфер, разделив его на две части,
используя пространство в качестве разделительной части.
Поэтому, когда вы посмотрели заголовок авторизации, вы видели, почему пространство
разделяет значение basic, а затем дает вам остальную
часть закодированной строки Base64, которая содержит имя пользователя и пароль.
И из этого мы хотим извлечь имя пользователя и пароль.
Таким образом, мы собираемся разделить это значение, а затем мы только рассмотрим, поэтому,
когда вы разделите строку, используя это, она разделит это на массив.
И первый элемент массива содержит Basic.
Второй элемент массива - это то, где существует эта кодированная строка base64.
Вот почему мы смотрим только на второй элемент этого массива.
Таким образом, это разделение приведет к расколу строки на массив из двух элементов.
Таким образом, мы могли бы, мы берем из этого закодированную строку base64.
И затем мы в этот буфер, а затем мы собираемся преобразовать это в строку.
И снова разделите строку еще раз, потому что
сама строка будет содержать имя пользователя и пароль, разделенные двоеточием.
Итак, я собираюсь разделить его, используя двоеточие
в качестве точки разделения для этой строки здесь.
Поэтому обратите внимание, что я загружаю два разделения здесь, один на пробел, а
второй, используя двоеточие, которое отделяет имя пользователя и пароль.
Таким образом, в конце этой переменной auth должен быть массив, содержащий два элемента,
имя пользователя и пароль, который извлекается из строки base64.
Итак, на данный момент я собираюсь сделать,
просто для вашей ясности,
я просто скажу var
username = auth [0], а затем,
var password = auth [1].
Итак, теперь я извлек имя пользователя и пароль из моего заголовка авторизации.
Теперь я собираюсь использовать значение по умолчанию для имени пользователя и
пароля в этой реализации.
Позже мы увидим, что мы можем позволить пользователям создавать свои собственные имя пользователя и
пароль.
Но на данный момент я просто собираюсь использовать
закодированное имя пользователя и пароль как admin.
И пароль будет просто паролем.
Для этого основного упражнения
мы будем использовать это как имя пользователя и пароль по умолчанию.
Если имя пользователя, которое я получаю, является admin, а пароль - строковый пароль.
Тогда я все в порядке, чтобы разрешить
запрос клиента будет передан следующему промежуточному программному обеспечению, поэтому я скажу следующее.
Поэтому, когда я говорю следующее, это означает, что из auth
их запрос будет передан на следующий набор промежуточного программного обеспечения здесь, а
затем Express попытается сопоставить конкретный запрос с
конкретным промежуточным программным обеспечением, которое будет обслуживать этот запрос.
Так вот где мы позволим ему пройти через него.
Если нет, это означает, что имя пользователя и
пароль не соответствуют запросу,
имя пользователя и пароль по умолчанию, которые я настраиваю.
Таким образом, это означает, что есть ошибка.
Так что в этом случае я снова вызову ошибку здесь,
так что мы скажем иначе, Error.
Таким образом, мы снова создадим ошибку, а затем вызовем клиента, чтобы отправить
правильную информацию авторизации, имя пользователя и пароль здесь.
Так вот и всё.
Это немного промежуточного программного обеспечения, которое мы только что реализовали здесь,
промежуточное программное обеспечение для авторизации, которое мы только что реализовали здесь.
Достаточно реализовать обычную аутентификацию внутри приложения.
Итак, сделав эти изменения,
давайте сохраним изменения, а затем посмотрим, как это действительно работает на практике.
Давайте сохраним изменения.
А потом мы пойдем и запустим наш сервер.
Теперь, идя на терминал, конечно,
убедитесь, что вы сервер MongoDB запущен и запущен.
В противном случае ваш Express сервер не будет запущен.
Поэтому у меня есть подсказка npm start, а
затем ваш Express сервер будет запущен и запущен.
Теперь откройте окно инкогнито в браузере.
Причина, по которой я прошу вас использовать окно инкогнито, заключается в том, что, когда вы
вводите имя пользователя и пароль, он будет кэширован вашим браузером.
Поэтому, если вы используете окно инкогнито, если вы перезапустите браузер...
Затем кэш будет очищен автоматически,
поэтому эта информация не запомнится.
Теперь, что произойдет, если вы введете имя пользователя и пароль, он будет кэширован,
поэтому впоследствии, когда вы попытаетесь получить доступ к серверу, кэшированная информация
будет автоматически отправлена в запросе, который вы создаете.
Поэтому важно
использовать окно инкогнито, чтобы показать вам, что работает обычная аутентификация.
Поэтому в адресной строке вашего браузера наберите localhost: 3000 и посмотрите, что произойдет.
Поэтому, когда вы вводите localhost: 3000, вы сразу увидите, что ваш браузер всплывает
этот диалог сверху с просьбой ввести имя пользователя и пароль.
Если вы не напечатаете его, позвольте мне ввести какое-то случайное имя пользователя, а затем посмотреть, что произойдет.
Поэтому, если я введу случайное имя пользователя и пароль,
вы увидите, что запрос отклоняется.
Мне не разрешено получить доступ к серверу, а
затем, если сервер снова скажет, что клиент не авторизован.
И поэтому он вернется и снова бросит нам вызов для правильной аутентификации.
Поэтому позвольте мне ввести текущую аутентификацию.
Поэтому позвольте мне ввести admin и пароль в качестве пароля.
И затем войдите в систему, и вы увидите, что теперь
приложение Express позволит вам войти и получить доступ к значению по умолчанию,
которое в данном случае является файлом Index.html из этой статической общей папки.
Теперь то же самое, если вы пытаетесь получить доступ к localhost: diss
без авторизации, то это не сработает.
И я продемонстрирую это вам с помощью почтальона через минуту.
Теперь, увидев, как работает аутентификация, давайте
посмотрим, что произошло на консоли на нашем сайте сервера.
Перейдя на консоль на нашем сайте сервера вы видите, что
здесь распечатана целая куча информации, так что, как вы видели,
мы выходили заголовки запросов здесь.
Таким образом, это первый запрос, который пришел с заголовком запроса.
И здесь вы видите, что в запросе нет заголовка авторизации.
И поэтому ваш сервер отклонил это с 401 просьбой к нашему клиенту авторизоваться.
Второй раз также, поскольку мы не ввели правильную авторизацию, которую
сервер отклонил.
Конечно, теперь вы заметили, что в заголовке, прямо там, авторизация
действительно включена, и вы видите, как включена авторизация.
Он говорит, что Basic разделен пробелом и
разделен 64-битной кодированной строкой, которая содержит имя пользователя и пароль.
И затем мы видим, что сервер
отклонил это, потому что авторизация была неправильной в тот момент.
Теперь позже мы ввели правильное имя пользователя и пароль.
Поэтому прямо там, в третьем запросе, который пришел, мы набрали правильное имя пользователя и
пароль.
Вот почему вы видите, что заголовок запроса содержит авторизацию,
и эта строка использует правильную кодировку имени пользователя и пароля.
Откуда мне это знать?
Ну, я проверил и знаю,
что это базовая иностранная кодированная версия строки там.
Мы также увидим, что от нашего почтальона имиджа или что.
Теперь вы видите, что запрос был принят, и
он вернул значение правильно.
И тогда, конечно, впоследствии, клиент запросил иконку, иконку.
И так как у нас нет фавикона на стороне сервера, он отвечает 404 и,
конечно, ваш любимый значок не отображается в адресной строке.
Так что это нормально, но обратите внимание, в частности.
Те, кого конкретно запросили, пришли,
где был включен правильный заголовок авторизации.
И так, в то время это было успешным.
Давайте попробуем посмотреть, как мы можем сделать то же самое с почтой.
Итак, здесь у меня открыто окно почтовой карты.
И поэтому в моем окне Postman я собираюсь ввести
get to localhost: на мой сервер, а затем отправить запрос, и
вы сразу заметите, что он бросает вызов 401 несанкционированным.
Таким образом, это ответное сообщение со стороны сервера,
поэтому обратите внимание, что оно сохраняет, 401 Несанкционированный.
И он говорит, что ответ должен включать поле заголовка WWW-Authenticate.
И это вызовет клиента, чтобы отправить информацию авторизации,
имя пользователя и пароль.
Таким образом, просматривая это, мы видим, что предложение, которое вы не аутентифицированы, а
затем код 401 здесь.
Теперь глядя на заголовки ответного сообщения.
Когда вы смотрите на заголовок ответного сообщения, вы можете увидеть, в частности,
этот заголовок включен там, который является www.authenticatebasic.
Теперь, как мы делаем аутентификацию или авторизацию в почте?
Вот где они будут идти к этому прямо под этим окном здесь,
вы увидите эту авторизацию здесь.
И когда вы нажимаете на авторизацию, прямо сейчас он говорит НЕТ AUTH..
Давайте используем обычную аутентификацию.
Поэтому, когда я говорю базовую аутентификацию, он
даст мне эти два поля здесь, где я могу ввести имя пользователя и пароль.
Позвольте мне ввести правильное имя пользователя и пароль.
Так что я скажу имя пользователя admin, пароль - пароль P-A-S-S-W-O-R-D.
Так что вы видите, это именно тот пароль, который у нас есть.
Поэтому, как только вы введете имя пользователя и пароль, они скажут запрос на обновление.
Поэтому, когда я нажимаю на запрос обновления, вы увидите, что сразу в заголовке
вы увидите, что
здесь есть это поле, которое было добавлено здесь, говоря авторизация.
И тогда, вы увидите, что эта вторая часть, ценность, которую вы можете принять.
Он говорит basic и пробел, а затем эта конкретная строка.
Поэтому, если вы проверите эту конкретную строку здесь, это будет точная
строка, которую вы увидите в заголовке сообщения об успешном запросе.
Обратите внимание, что говорит эта строка.
Он говорит YWR что-то, а затем заканчивается Q равным.
Перейдя к нашему терминалу, вы видите, что успешный запрос
фактически содержал именно эту строку здесь.
Он говорит YWR, а затем заканчивается Q равным там.
Таким образом, введя информацию в авторизацию, а затем нажав
на запрос обновления, эта информация добавляется в заголовки авторизации.
Итак, теперь это запрос get,
мне не нужен тип содержимого там, потому что он не содержит никакого тела.
Итак, теперь, когда авторизация была включена,
давайте отправим запрос сейчас правильно, а затем вы увидите, что
ответ, поступающий с сайта сервера, будет содержать файл индекса, как вы ожидаете.
Теперь позвольте мне удалить разрешение.
Теперь это причина, по которой Postmap помогает мне намного
легче проверить эти вещи, я могу удалить авторизацию, а затем отправить запрос.
И он все равно будет содержать эту авторизацию,
потому что я ввел это в поле авторизации.
Поэтому позвольте мне очистить разрешение оттуда, а затем отправить запрос здесь.
И тогда он говорит, что вы не аутентифицированы.
Аналогично, если я отправлю запрос на блюда.
Раньше это работало нормально, но
теперь вы видите, что мы не можем получить доступ к конечной точке /dishes.
И то же самое со всеми остальными конечными точками APR тоже.
Вам не будет разрешен доступ, так как промежуточное программное обеспечение авторизации появляется до того, как
вы получите доступ к любой из этих конечных точек
в списке промежуточного программного обеспечения для вашего экспресс-сервера.
Так что теперь, если я включу авторизацию,
а затем обновлю свой запрос, а затем отправьте запрос на сервер,
тогда сервер ответит.
Теперь, очевидно, в этот момент моя база данных пуста, поэтому
она отвечает с пустым массивом.
Но теперь запрос прошел успешно, и
я могу получить информацию с серверного носка.
Таким образом, это быстрая демонстрация базовой
авторизации в нашем приложении для экспресс-отдыха APR.
С этим мы завершаем это упражнение.
Это хорошее время для
вас сделать комментарий с сообщением базовой аутентификации.
[ МУЗЫКА]