Хочу получить запароленный доступ к веб-интерфейсу МД извне.
Сделал как описано тут. Всё работает, но только для одного пользователя.
А если пользователей несколько и каждому необходимо обеспечить доступ под своим аккаунтом, то как это сделать?
Многопользовательский доступ извне
Модератор: immortal
Re: Многопользовательский доступ извне
Вы сделали доступ к http страничке мд, а чтобы логиниться под конкретным пользователем, заводите пользователей непосредственно в меню управления и переключаете ихи как вам вздумается справа сверху
-
- Сообщения: 102
- Зарегистрирован: Вт июл 17, 2018 10:19 am
- Благодарил (а): 23 раза
- Поблагодарили: 4 раза
Re: Многопользовательский доступ извне
Вопросов стало ещё больше.
1. При таком доступе, когда требует логин и пароль для странички, я попадаю на эту страничку уже будучи залогининым под тем пользователем, чей пароль ввёл. То есть имеется ввиду, что после этого надо еще раз перелогиниться под другого юзера? Но это же криво.
2. Задача состоит не в том, чтобы переключаться между пользователями с одного устройства, а в том, чтобы каждый пользователь логинился в интерфейс под своим аккаунтом со своих устройств, и, соответственно, введя пароль однажды и запомнив его, уже не вводить повторно каждый раз. Это как сделать?
3. Я в данной задаче рассматриваю в первую очередь приложение мд на смартфоне, а там нет кнопки логина в интерфейсе, как в браузерной версии. Её можно как-то вывести в меню? Хотя даже если и можно, то перелогиниваться все равно придется каждый раз, так как первоначальный вход в приложении осуществляется именно по тому одному аккаунту, который указан в config.php. То есть все равно неудобно.
1. При таком доступе, когда требует логин и пароль для странички, я попадаю на эту страничку уже будучи залогининым под тем пользователем, чей пароль ввёл. То есть имеется ввиду, что после этого надо еще раз перелогиниться под другого юзера? Но это же криво.
2. Задача состоит не в том, чтобы переключаться между пользователями с одного устройства, а в том, чтобы каждый пользователь логинился в интерфейс под своим аккаунтом со своих устройств, и, соответственно, введя пароль однажды и запомнив его, уже не вводить повторно каждый раз. Это как сделать?
3. Я в данной задаче рассматриваю в первую очередь приложение мд на смартфоне, а там нет кнопки логина в интерфейсе, как в браузерной версии. Её можно как-то вывести в меню? Хотя даже если и можно, то перелогиниваться все равно придется каждый раз, так как первоначальный вход в приложении осуществляется именно по тому одному аккаунту, который указан в config.php. То есть все равно неудобно.
-
- Сообщения: 102
- Зарегистрирован: Вт июл 17, 2018 10:19 am
- Благодарил (а): 23 раза
- Поблагодарили: 4 раза
Re: Многопользовательский доступ извне
Искав совершенно другое, случайно наткнулся на решение здесь viewtopic.php?f=4&t=2425&start=40#p81854.
Однако там тоже не полностью готовый ответ, и мне, как чайнику, пришлось некоторое время поковыряться, чтобы это запустить.
Решение рабочее, однако при обновлении системы будет затёрто и придётся корректировать вновь, поэтому если кто подскажет как это автоматизировать - буду благодарен.
В первую очередь для себя (чтобы проще потом найти), ну и для таких же чайников дублирую сюда инструкцию со всеми правками.
Для начала необходимо добавить функцию последовательного перебора пар логин-пароль в файл general.class.php (именно этот файл будет переписан при обновлении системы).
Подключаемся к МД по SSH (с помощью putty, например, по умолчанию логин pi, пароль raspberrymj или raspberry).
В консоли открываем файл командой:
Проматываем в конец и дописываем код функции:
Далее в этом же файл где-то близко к его началу находим и комментируем двойным слэшем строку
Под этой строкой вставляем новую строку
После чего сохраняем изменения и закрываем nano: Ctrl+O, Enter, Ctrl+X.
Далее нужно отредактировать файл config.php, открываем его:
Ищем строки
Если они были раскомментированы, комментируем их обратно, а ниже добавляем следующее:
где вместо user1 и user2 вставлям логины пользователей, вместо pass1 и pass2 пароли.
Если нужно больше пользователей - добавляем в таком же формате через запятую после "user2" и "pass2".
Cохраняем изменения и закрываем nano: Ctrl+O, Enter, Ctrl+X.
Перезагружаем систему командой
Готово.
Хочу еще тут же отметить, что строка с дефайном домашней сети в config.php
должна быть раскомментирована, иначе авторизация не будет запрашиваться.
Более того, если МД сидит за натом роутера, да ещё и доступ к нему через облако (как в моём случае через KeenDNS), то чтобы авторизация запрашивалась необходимо указать несуществующий адрес сети.
Например, у меня домашняя сеть 192.168.0.*, но в дефайне я указал 192.168.1.*. Только в этом случае авторизация будет запрашиваться.
Однако там тоже не полностью готовый ответ, и мне, как чайнику, пришлось некоторое время поковыряться, чтобы это запустить.
Решение рабочее, однако при обновлении системы будет затёрто и придётся корректировать вновь, поэтому если кто подскажет как это автоматизировать - буду благодарен.
В первую очередь для себя (чтобы проще потом найти), ну и для таких же чайников дублирую сюда инструкцию со всеми правками.
Для начала необходимо добавить функцию последовательного перебора пар логин-пароль в файл general.class.php (именно этот файл будет переписан при обновлении системы).
Подключаемся к МД по SSH (с помощью putty, например, по умолчанию логин pi, пароль raspberrymj или raspberry).
В консоли открываем файл командой:
Код: Выделить всё
sudo nano /var/www/html/lib/general.class.php
Код: Выделить всё
function check_login($user, $pass){
if(is_array(EXT_ACCESS_USERNAME)) {
for($i=0; $i<=count(EXT_ACCESS_USERNAME); $i++) {
if($user == EXT_ACCESS_USERNAME[$i] && $pass == EXT_ACCESS_PASSWORD[$i]) { return true;}
}
} else {
if($user == EXT_ACCESS_USERNAME && $pass == EXT_ACCESS_PASSWORD) {return true;}
}
}
Код: Выделить всё
// if ($_SERVER['PHP_AUTH_USER'] != EXT_ACCESS_USERNAME || $_SERVER['PHP_AUTH_PW'] != EXT_ACCESS_PASSWORD)
Код: Выделить всё
if(!check_login($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']))
Далее нужно отредактировать файл config.php, открываем его:
Код: Выделить всё
sudo nano /var/www/html/config.php
Код: Выделить всё
//Define('EXT_ACCESS_USERNAME', ''); // access details for external network (internet)
//Define('EXT_ACCESS_PASSWORD', '');
Код: Выделить всё
$user = array("user1", "user2");
$pass = array("pass1", "pass2");
Define('EXT_ACCESS_USERNAME', $user);
Define('EXT_ACCESS_PASSWORD', $pass);
Если нужно больше пользователей - добавляем в таком же формате через запятую после "user2" и "pass2".
Cохраняем изменения и закрываем nano: Ctrl+O, Enter, Ctrl+X.
Перезагружаем систему командой
Код: Выделить всё
sudo reboot
Хочу еще тут же отметить, что строка с дефайном домашней сети в config.php
Код: Выделить всё
Define('HOME_NETWORK', '192.168.1.*');
Более того, если МД сидит за натом роутера, да ещё и доступ к нему через облако (как в моём случае через KeenDNS), то чтобы авторизация запрашивалась необходимо указать несуществующий адрес сети.
Например, у меня домашняя сеть 192.168.0.*, но в дефайне я указал 192.168.1.*. Только в этом случае авторизация будет запрашиваться.
- За это сообщение автора ksv поблагодарили (всего 2):
- viktor6 (Чт авг 15, 2019 10:48 pm) • Keen Lizard (Ср ноя 27, 2019 2:03 pm)
- Рейтинг: 2.33%