Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/Web Authentication

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


HTTP-аутентификация[1]

Этот пример показывает, как при помощи библиотеки Webduino осуществить HTTP-аутентификацию двух пользователей – обычного и администратора.

Код

  1. /* HTTP-аутентификация (Webduino) */
  2.  
  3. /* Этот пример написан с учетом того, что вы знакомы с основами
  4.  * библиотеки Ethernet (особенно с настройкой адресов IP и MAC),
  5.  * а также с основами Webduino. И для начала лучше загляните в пример
  6.  * «HelloWorld», если еще не сделали этого. */
  7.  
  8. /* Вы можете поменять область аутентификации, указав
  9.  * WEBDUINO_AUTH_REALM перед подключением WebServer.h */
  10. #define WEBDUINO_AUTH_REALM "Webduino Authentication Example"
  11.  
  12. #include "SPI.h"
  13. #include "Ethernet.h"
  14. #include "WebServer.h"
  15.  
  16. /* ПОСТАВЬТЕ ЗДЕСЬ СОБСТВЕННОЕ ЗНАЧЕНИЕ. MAC-адрес должен отличаться
  17.  * от других девайсов в сети. Если MAC-адрес Ethernet-модуля совпадет
  18.  * с другим MAC-адресом, это повлечет проблемы с получением пакетов.
  19.  */
  20. static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
  21.  
  22. /* ВЫСТАВЬТЕ ТУТ ЗНАЧЕНИЕ, СООТВЕТСТВУЮЩЕЕ СЕТИ ВАШЕГО ХОСТА.
  23.  * Большинство сетей находятся в диапазонах 192.168.0.XXX
  24.  * или 192.168.1.XXX. Выберите адрес, который не используется
  25.  * и не присваивается автоматически DHCP-сервисом, к которому
  26.  * подключен ваш роутер. */
  27. static uint8_t ip[] = { 192, 168, 1, 210 };
  28.  
  29. /* Это создает экземпляр веб-сервера. Как PREFIX указываем "",
  30.  * благодаря чему все страницы будут в корне сервера. */
  31. #define PREFIX ""
  32. WebServer webserver(PREFIX, 80);
  33.  
  34. void defaultCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
  35. {
  36.   server.httpSuccess();
  37.   if (type != WebServer::HEAD)
  38.   {
  39.     P(helloMsg) = "<h1>Hello, World!</h1><a href=\"private.html\">Private page</a>";
  40.     server.printP(helloMsg);
  41.   }
  42. }
  43.  
  44. void privateCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
  45. {
  46.   /* Если пользователь запросил эту страницу при помощи
  47.    * следующих данных: username = user, password = user,
  48.    * то показываем страницу, говорящую «Hello User».
  49.    * Эти данные должны быть объединены двоеточием (примерно так:
  50.    * «username:password») и зашифрованы при помощи Base64, но это
  51.    * нужно делать вне Arduino, чтобы сэкономить вычислительные
  52.    * ресурсы. Другими словами, «dXNlcjp1c2Vy» – это «user:user»,
  53.    * зашифрованное в Base64. Если вам нужна динамическая смена
  54.    * имени/пароля, поищите в интернете библиотеку Base64. */
  55.   if (server.checkCredentials("dXNlcjp1c2Vy"))
  56.   {
  57.     server.httpSuccess();
  58.     if (type != WebServer::HEAD)
  59.     {
  60.       P(helloMsg) = "<h1>Hello User</h1>";
  61.       server.printP(helloMsg);
  62.     }
  63.   }
  64.   /* Если пользователь запросил эту страницу при помощи
  65.    * следующих данных: username = admin, password = admin,
  66.    * то показываем страницу, говорящую «Hello Admin».
  67.    * Другими словами, «YWRtaW46YWRtaW4=» – это «admin:admin. */
  68.   else if (server.checkCredentials("YWRtaW46YWRtaW4="))
  69.   {
  70.     server.httpSuccess();
  71.     if (type != WebServer::HEAD)
  72.     {
  73.       P(helloMsg) = "<h1>Hello Admin</h1>";
  74.       server.printP(helloMsg);
  75.     }
  76.   }
  77.   else
  78.   {
  79.     /* отправляем обратно ошибку 401, запрашивая, чтобы пользователь снова вписал свои данные. */
  80.     server.httpUnauthorized();
  81.   }
  82. }
  83.  
  84. void setup()
  85. {
  86.   Ethernet.begin(mac, ip);
  87.   webserver.setDefaultCommand(&defaultCmd);
  88.   webserver.addCommand("index.html", &defaultCmd);
  89.   webserver.addCommand("private.html", &privateCmd);
  90.   webserver.begin();
  91. }
  92.  
  93. void loop()
  94. {
  95.   char buff[64];
  96.   int len = 64;
  97.  
  98.   /* вечно обрабатываем входящие соединения (по одному за раз):*/
  99.   webserver.processConnection(buff, &len);
  100. }

См.также

Внешние ссылки

  1. github.com - Web_Authentication.ino