• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Решено Web сервер - ! нужна авторизация

Alex1

New member
@kab Cegth
Temp: -0.8 C`
Temp: -2.0 C`
Temp: 112.6 C`

t += (str1.substring(0, str1.length() - 1)); это наверно самое правильное решение
Отличная работа . Вам ))
 

kab

New member
@Alex1
Наверно, на сегодня достаточно
на будущее:
Когда будет желание - посмотри два поста насчет авторизации повнимательней - начинай делать - и подключай меня
 

Alex1

New member
********* Огромное спасибо КАВ за помощь ********** который мне помог, тема закрыта, ключевой отрезок кода
Код:
  //Check if header is present and correct
   bool is_authentified(){
   Serial.println("Enter is_authentified");
   if (server.hasHeader("Cookie")){  
   Serial.print("Found cookie: ");
   String cookie = server.header("Cookie");
   Serial.println(cookie);
   if (cookie.indexOf("ESPSESSIONID=1") != -1) {
   Serial.println("Authentification Successful");
   return true;
    }
  }
   Serial.println("Authentification Failed");
   return false;   
   }

  //login page, also called for disconnect
  void handleLogin(){
  String msg;
  if (server.hasHeader("Cookie")){  
    Serial.print("Found cookie: ");
    String cookie = server.header("Cookie");
    Serial.println(cookie);
   }
  if (server.hasArg("DISCONNECT")){
    Serial.println("Disconnection");
    String header = "HTTP/1.1 301 OK\r\nSet-Cookie: ESPSESSIONID=0\r\nLocation: /login\r\nCache-Control: no-cache\r\n\r\n";
    server.sendContent(header);
    return;
   }
  if (server.hasArg("USERNAME") && server.hasArg("PASSWORD")){
    if (server.arg("USERNAME") == "admin" &&  server.arg("PASSWORD") == "admin" ){
     String header = "HTTP/1.1 301 OK\r\nSet-Cookie: ESPSESSIONID=1\r\nLocation: /\r\nCache-Control: no-cache\r\n\r\n";
     server.sendContent(header);
     Serial.println("Log in Successful");
     return;
    }
  msg = "<p style=\"text-align: left; font-style: italic; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:16px; color:red; \">Error username/password! Try again.</p>";
  Serial.println("Log in Failed");
  }


  String content = "<html><head><meta http-equiv= Content-Type content=text/html; charset=utf-8><style>{font-family:Verdana, Arial, Helvetica, sans-serif; font-size:16px;}body{background-color:rgba(0, 155, 255, 0.36);}</style><body><form action='/login' method='POST'>Enter: User login and password: <body><html><br><br>";
  content += "User:  <input type='text' name='USERNAME' placeholder='user name'><br><br>";
  content += "Pass:  <input type='password' name='PASSWORD' placeholder='user password'><br><br>";
  content += "<input type='submit' name='SUBMIT' value='Click to continue - OK'></form>" + msg + "<br>";
  content += "You also can go <a href='/inline'>here</a></body></html>";
  server.send(200, "text/html", content);
}

//root page can be accessed only if authentification is ok
  void handleRoot(){
  Serial.println("Enter handleRoot");
  String header;
  if (!is_authentified()){
    String header = "HTTP/1.1 301 OK\r\nLocation: /login\r\nCache-Control: no-cache\r\n\r\n";
    server.sendContent(header);
    return;
  }
response();
  sensors.requestTemperatures();
 
Видимо я самый бестолковый на этом сайте, но сделать авторизацию не могу. Три дня потратил в пустую. Скетч у меня конечно другой и сделан не мной. Обычный градусник. Подскажите как сделать вход по паролю.
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS D2 // пин GPIO-4 к которому подключено реле
#define RELAY D1 // пин GPIO-5 к которому подключен датчик температуры DS18b20
bool relay = false; // разомкнуто для низкоуровнего реле при включении микроконтроллера.
float temp;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

// Вместо звездочек свои параметры WiFi сети
const char* ssid = ",,,,,,,,";
const char* password = ",,,,,,,,";

ESP8266WebServer server(80); // Порт сервера

void setup() {
// Последовательный порт для отладки
Serial.begin(115200);

// Инициализация выхода реле
pinMode(RELAY, OUTPUT);
digitalWrite(RELAY, relay); // при включении микроконтроллера низкоуровневое реле разомкнуто

// Инициализация датчика температуры DS18b20
sensors.begin();

// Подлючение к WiFi
WiFi.mode(WIFI_STA);
// присваиваем статичесий IP адрес
WiFi.config(IPAddress(192,168,0,96),IPAddress(192,168,0,1),IPAddress(255,255,255,0),IPAddress(192,168,0,1));
WiFi.begin(ssid, password);
if (WiFi.waitForConnectResult() == WL_CONNECTED) {
// Запуск WEB-сервера
server.on ( "/", HTTP);
server.onNotFound ( HTTP);
server.begin();
Serial.println ();
Serial.print( "HTTP server start! Open http://");
Serial.println(WiFi.localIP());
}
else {
Serial.printf("WiFi started is fail");
}
}

void loop() {
server.handleClient();
delay(50);
}

/*
Оработчик главной страницы сервера
*/
void HTTP(void) {
bool stat = false;
sensors.requestTemperatures(); // Опрос датчиков
temp = sensors.getTempCByIndex(0);
if ( server.hasArg("stat") ) {
if ( strncmp(server.arg("stat").c_str(), "1", 1) == 0 )stat = true;
}
else {
stat = relay;
}

String website = "";

website =
"<html>\
<head>\
<meta charset=\"utf-8\" />\
<title>WiFi control temр</title>\
<style>\
body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: blue; }\
</style>\
</head>\
<body>\
<h1 style=\"color: black;\">Температура</h1>\
<h1>Температура: \n";
website += (float)temp;
website += "°С";
website += "\</h3>\n";

if ( stat ) {
website += "\
<h3>Реле: Включено</br>\
<a style=\"color: red;\" href=\"/?stat=0\">Выключить</a></h1>\
";
}
else {
website += "\
<h3>Обогрев: Выключено</br>\
<a style=\"color: red;\" href=\"/?stat=1\">Включить</a><h1>\
";
}
website += "\
</body>\
</html>";
server.send ( 200, "text/html", website );
Serial.println (temp);
if ( stat != relay ) {
relay = stat;
digitalWrite(RELAY, relay);
if (relay)Serial.println("Power is ON");
else Serial.println("Power is OFF");
}

}
 

Slacky

Member
@Александр Юрьевич.
Добавляем вот сюда

Код:
void HTTP(void) {
  bool stat = false;
  if (условие_при_котором_нужна_авторизация) {
    if (!server.authenticate(ВашLogin, ВашPassword))
      return server.requestAuthentication();
  }
 
@Александр Юрьевич.
Добавляем вот сюда

Код:
void HTTP(void) {
  bool stat = false;
  if (условие_при_котором_нужна_авторизация) {
    if (!server.authenticate(ВашLogin, ВашPassword))
      return server.requestAuthentication();
  }
Спасибо Федор! А что такое "условие_при_котором_нужна_авторизация"? Авторизация нужна при входе на веб страницу, чтобы зайти мог только тот кто знает пароль и логин.
 
Вот так ругается Ардуина:

D:\Саша\Домашняя автоматика\Termometr_Proba\Termometr_Proba.ino: In function 'void HTTP()':

Termometr_Proba:72: error: 'admin' was not declared in this scope

exit status 1
'admin' was not declared in this scope
 
Вставил в строку №25 "server.authenticate("admin", "1111")".
Ардуина ругается:
Termometr_Proba:25: error: 'server' does not name a type

D:\Саша\Домашняя автоматика\Termometr_Proba\Termometr_Proba.ino: In function 'void HTTP()':

Termometr_Proba:72: error: 'admin' was not declared in this scope

exit status 1
'server' does not name a type
 

Slacky

Member
Последнее редактирование:
  • Like
Реакции: kab
Спасибо Федор!
Заработало. По сравнению с Вами чувствую себя ущербным.
Но больше всего меня удивляет откуда Вы берете терпение на общение с такими как я?
 

Melandr

Member
А такой вопрос. Строку
if (!server.authenticate(admin, 1111)) return server.requestAuthentication();
нужно добавлять во все обработчики запросов, которые приходят на ESP?
Просто когда добавляешь во все обработчики, при первом подключении к ESP вываливается окно с авторизацией и не всегда успеваешь ввести данные, а оно опять выскакивает. Так как грузятся html ресурсы из ESP
 
Сверху Снизу