Многопользовательский доступ извне

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Ответить
ksv
Сообщения: 102
Зарегистрирован: Вт июл 17, 2018 10:19 am
Благодарил (а): 23 раза
Поблагодарили: 4 раза

Многопользовательский доступ извне

Сообщение ksv » Вс дек 16, 2018 10:35 pm

Хочу получить запароленный доступ к веб-интерфейсу МД извне.
Сделал как описано тут. Всё работает, но только для одного пользователя.
А если пользователей несколько и каждому необходимо обеспечить доступ под своим аккаунтом, то как это сделать?
lts
Сообщения: 21
Зарегистрирован: Ср янв 31, 2018 6:23 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Многопользовательский доступ извне

Сообщение lts » Пн дек 17, 2018 10:50 am

Вы сделали доступ к http страничке мд, а чтобы логиниться под конкретным пользователем, заводите пользователей непосредственно в меню управления и переключаете ихи как вам вздумается справа сверху
ksv
Сообщения: 102
Зарегистрирован: Вт июл 17, 2018 10:19 am
Благодарил (а): 23 раза
Поблагодарили: 4 раза

Re: Многопользовательский доступ извне

Сообщение ksv » Ср дек 19, 2018 8:16 pm

Вопросов стало ещё больше.

1. При таком доступе, когда требует логин и пароль для странички, я попадаю на эту страничку уже будучи залогининым под тем пользователем, чей пароль ввёл. То есть имеется ввиду, что после этого надо еще раз перелогиниться под другого юзера? Но это же криво.

2. Задача состоит не в том, чтобы переключаться между пользователями с одного устройства, а в том, чтобы каждый пользователь логинился в интерфейс под своим аккаунтом со своих устройств, и, соответственно, введя пароль однажды и запомнив его, уже не вводить повторно каждый раз. Это как сделать?

3. Я в данной задаче рассматриваю в первую очередь приложение мд на смартфоне, а там нет кнопки логина в интерфейсе, как в браузерной версии. Её можно как-то вывести в меню? Хотя даже если и можно, то перелогиниваться все равно придется каждый раз, так как первоначальный вход в приложении осуществляется именно по тому одному аккаунту, который указан в config.php. То есть все равно неудобно.
ksv
Сообщения: 102
Зарегистрирован: Вт июл 17, 2018 10:19 am
Благодарил (а): 23 раза
Поблагодарили: 4 раза

Re: Многопользовательский доступ извне

Сообщение ksv » Вт авг 13, 2019 3:01 pm

Искав совершенно другое, случайно наткнулся на решение здесь viewtopic.php?f=4&t=2425&start=40#p81854.
Однако там тоже не полностью готовый ответ, и мне, как чайнику, пришлось некоторое время поковыряться, чтобы это запустить.
Решение рабочее, однако при обновлении системы будет затёрто и придётся корректировать вновь, поэтому если кто подскажет как это автоматизировать - буду благодарен.

В первую очередь для себя (чтобы проще потом найти), ну и для таких же чайников дублирую сюда инструкцию со всеми правками.

Для начала необходимо добавить функцию последовательного перебора пар логин-пароль в файл 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']))
После чего сохраняем изменения и закрываем nano: Ctrl+O, Enter, Ctrl+X.

Далее нужно отредактировать файл 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);
где вместо user1 и user2 вставлям логины пользователей, вместо pass1 и pass2 пароли.
Если нужно больше пользователей - добавляем в таком же формате через запятую после "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%
Ответить