Hallo zusammen,
ich versuche aktuell den angemeldeten Benutzer zu ermitteln, um diese Information in der weiteren Verarbeitung zu verwenden.
Leider finde ich keine Informationen, welcher User gerade angemeldet ist und im Forum habe ich auch nichts gefunden. Kann mir jemand einen Tipp geben? Danke.
Definiert habe ich:
define allowedWEB allowed
attr allowedWEB validFor WEBtablet
attr allowedWEB basicAuth { ("$user:$password" eq "user1:pwd1") || ("$user:$password" eq "user2:pwd2") }
attr allowedWEB allowedCommands set,get
Ich möchte z.B. in einem Notify auf die Information zurückgreifen, dass user1 gerade mit dem System interagiert.
An der Webtablet Instanz finde ich aber kein Reading dazu:
DeviceOverview
WEBtablet_192.168.0.18_50963
Connected
WEBtablet_192.168.0.18_50963
WEBtablet_192.168.0.18_50963
Internals
Authenticated 1
BUF
FD 36
FW_ID 306
LASTACCESS 1539985581
NAME WEBtablet_192.168.0.18_50963
NR 306
NTFY_ORDER WEBtablet_192.168.0.18_50963
PEER 192.168.0.18
PORT 50963
SNAME WEBtablet
SSL
STATE Connected
TEMPORARY 1
TYPE FHEMWEB
canAsyncOutput 1
Im Log steht zwar, dass versucht wurde etwas unerlaubtes zu tun, allerdings nicht von wem.
2018.10.19 23:46:26 3: Forbidden command modify for WEBtablet_192.168.0.18_50966
2018.10.19 23:46:26 1: stacktrace:
2018.10.19 23:46:26 1: main::allowed_Authorize called by fhem.pl (3597)
2018.10.19 23:46:26 1: main::CallFn called by fhem.pl (5364)
2018.10.19 23:46:26 1: main::Authorized called by fhem.pl (1202)
2018.10.19 23:46:26 1: main::AnalyzeCommand called by ./FHEM/01_FHEMWEB.pm (2583)
2018.10.19 23:46:26 1: main::FW_fC called by ./FHEM/01_FHEMWEB.pm (861)
2018.10.19 23:46:26 1: main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (533)
2018.10.19 23:46:26 1: main::FW_Read called by fhem.pl (3597)
2018.10.19 23:46:26 1: main::CallFn called by fhem.pl (726)
2018.10.19 23:46:26 4: authorize WEBtablet/cmd/modify: allowedWEB returned prohibited
FHEM weiß nicht, welcher Benutzer angemeldet ist.
Das allowed device für Deine Web-Instanz prüft lediglich, ob der von Dir bei basicAuth angegebene perl Code "wahr" oder "falsch" zurückliefert. Du kannst an dieser Stelle beliebigen perl Code einbauen, sogar ganz ohne Benutzer.
Hallo betateilchen,
vielen Dank für Deine Antwort.
Das mit dem beliebigen perl Code bringt mich schon mal weiter. Habe es jetzt so gelöst, dass basicAuth einfach eine Subroutine login aufruft. Dort wird User und Passwort gecheckt.
basicAuth {login($user,$password)}
Wenn ich jetzt noch die richtige Session zu fassen kriege, kann ich den User da mit eintragen und später wieder abrufen. Wenn ich das richtig verstehe, werden die Session auch als Device geführt, z.B.
WEBtablet_192.168.0.18_55843
Hast Du da noch einen Tipp für mich, mit welcher Variable ich das Device bei der Anmeldung ermitteln kann?
Würde dann den Aufruf so gestalten:
basicAuth {login($user,$password,$devicename)}
Viele Grüße
attacho
probier mal mit $FW_wname oder $FW_cname
$FW_cname ist die Lösung. Vielen Dank.
FW_cname ist nur dann die Loesung, falls allowed vom FHEMWEB aufgerufen wird.
In allowed_Authenticate bzw. allowed_Authorize wird die Instanz der aktuellen Verbindung im Parameter $cl uebergeben, das sollte auch im aufgerufenen Perl-Code verwendbar sein.
Ab sofort steht der Benutzer im AuthenticatedUser Feld der Verbindungs-Hash.
Siehe auch https://forum.fhem.de/index.php?topic=92423