ein flask-login für mehrere eigenständige flask applikationen

Django, Flask, Bottle, WSGI, CGI…
Antworten
chris_adnap
User
Beiträge: 27
Registriert: Freitag 23. September 2022, 09:36

Hallo,

ich bin jetzt mehrere Stunden am Suchen, bisher aber habe ich zu diesem Thema genau "0" finden können.
Ich weiß nicht mehr nach was ich alles gesucht habe (standalone, multiple apps, sso, etc...)
Immer wird nur erklährt wie flask-login in "eine" app eingebaut wird und wie diese dann arbeitet...

Über mehrere Jahre haben sich nun einige/eigenständige Applikationen zusammengetragen.
Jeweils in Ihrer eigenen venv.
Jetzt dachte ich, wird es an der Zeit an ein vorgeschaltetes Login System.

Natürlich könnte ich jeder app ein eigenes Login System verpassen und jeweils für sich Verwalten. Aber es sollte auch einfacher gehen. (meine ich :) ).
Also eine Zentralle Stelle, wo die möglichkeit besteht User anzulegen, zu verwalten und den jeweiligen User die Berechtigung zum Aufruf der jeweiligen Apps vergeben, etc..

Ich dachte an sowas wie, ein flask-login standalone einrichten, welche dann "einfach" in die anderen apps integriert wird.
Wäre alles in einer App, so wär dies kein Problem. Hier stellt sich nur das, jeder Applikation eigenständig aufgebaut, als vermeintliches das Problem dar.

Ist dies so möglich? Bin ich da auf dem richigen Weg? Dafür muss ja z.b. die jeweilige App außerhalb Ihrer venv, mit einer anderen App (bsp. flask-login) in denen eigenen venv Komunizieren.

Da ich bisher mit flask-login nicht gearbeitet habe, wäre evtl. doch der richtige Weg... In jeder App flask-login eigenständig zu integrieren und jeweils auf die gleiche "login-db" etc. zu verweisen?

Möglich ist ja alles, aber was wäre/ist der richtige Weg?

Vielleicht sehe ich den Wald vor lauter Bäumen nicht. Ich benötige nur einen Link wo so etwas mal angesprochen wird, einen Ansatz/Denkanstoß ...

Viele Grüße
Chris


** edit **
Auch ich lerne immer dazu :)
viewtopic.php?t=56723

Zitat bezüglich venv:
Und da muss nichts kuenstlich rein. Deine Abhaengigkeiten werden da rein installiert, so wie sie das sonst auch "irgendwo" werden (also zB in site-packages, oder ~/.local/... etc pp). Dein eigentliches Projekt muss das nicht. Das sollte einfach nur mit dem venv-Python gestartet werden, damit die installierten Pakete verfuegbar werden. Das ist ja der grundlegende Mechanismus. Ein Python-Interpreter, der so konfiguriert ist, dass er diese isolierten Pakete benutzt.

So ist dies aktuell aufgebaut.
Und darum auch das oben "venv übergreifend". Hier hatte ich im Kopf eine isolierung zwischen den jeweiligen Apps.
Also wenn ich flask-login als "app-xyz, nach diesem Schema auf-, einbaue und aus den jeweiligen anderen apps mit ...import xxx darauf zugreife, sollte dies auch ein richtiger Weg sein?

Code: Alles auswählen

alle_apps-|
           app_abc--|
                      -app
                      -env

           app-def--|
                      -app
                      -env

            app-ghi--|
                      -app
                      -env
** edit **
Benutzeravatar
grubenfox
User
Beiträge: 422
Registriert: Freitag 2. Dezember 2022, 15:49

Von Flaks habe ich jetzt auch keinen wirklichen Plan, aber diesen Satz
chris_adnap hat geschrieben: Montag 24. April 2023, 15:51 Ich dachte an sowas wie, ein flask-login standalone einrichten, welche dann "einfach" in die anderen apps integriert wird.
hätte ich jetzt anders beendet:
Ich dachte an sowas wie, ein flask-login standalone einrichten, welche dann "einfach" die anderen apps integriert.
Also nicht das Login in die anderen Apps rein, sondern die anderen Apps in das Login rein...

Ist das vielleicht ein Gedanke der zum Ziel führen könnte?
chris_adnap
User
Beiträge: 27
Registriert: Freitag 23. September 2022, 09:36

Hallo grubenfox,

danke für dein Feedback.
Ich glaube aber, das dies nicht der richtige Weg wäre, da... (so denke ich es mir gerade)

Wenn ich mit das so richtig gedacht habe, müsste ich nachdem ich (flask-login in die app(s) eingebunden habe) "nur" ....
Also... from ...appxyz.flask_login import xxx ...in die jeweilige routes.py einbauen/einbinden und könnte dann mit einem einfachen dekorator "@login_required" gleich prüfen, berechtigt oder nicht.

Code: Alles auswählen

@login_required <-- 
@test.route('/home.html', methods=['GET'])
Anders herum müsste ich jeweils alles aus der route ins login-modul packen, dazu hätte ich nicht mal eine Idee wie dies sinvoll umzusätzen wäre.
Ich lasse mich aber immer eines besseren belehren. :)


Viele Grüße
Chris
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@chris_adnap: flask-login ist doch ein einfaches Modul. Und dieses Modul mußt Du in jedes Deiner Apps einbinden, denn sonst kannst Du doch gar nicht ‹@login_required› benutzen.
Was Du zusätzlich brauchst, ist eine gemeinsame Datenbank, und eventuell Loginviews, die Du auch zwischen allen Apps teilen kannst. Das wäre also ein weiteres Modul, das Du in alle venvs installieren mußt.

Da Du unabhängige Apps mit einzelnen vens haben willst (und auch solltest), ist es natürlich nicht möglich, irgendwas aus einem anderen app-Verzeichnis einfach einzubinden. Der saubere Weg ist ein eigentständiges Modul; Du hast doch sicher noch weitere Funktionalität, die Du in Module ausgelagert hast und in mehreren Apps benutzt.
chris_adnap
User
Beiträge: 27
Registriert: Freitag 23. September 2022, 09:36

Hallo Sirius3,

danke auch dir, für deinen Beitrag.
"eine gemeinsame Datenbank, und eventuell Loginviews, die Du auch zwischen allen Apps teilen kannst. Das wäre also ein weiteres Modul, das Du in alle venvs installieren mußt."
... dies war auch "irgendwie" so mein Gedankengang.

Verschiedene Module habe ich, aber immer nur speziell für die jeweilige Applikation. Leider bisher nichts übergreifendes. Dies hätte hier sicherlich meine Sicht leichter gemacht.

Wie ich schon oben schrieb... "Wald vor lauter Bäume"...
Eine Nacht darüber geschlafen, schon war am nächsten Tag alles etwas klarer.

Das größte Problem. Ich hatte jede Applikation als eine Isolierte Umgebung betrachtet.

Ich versuche dann auch einen Weg zu finden, ohne "flask-login" in jede Applikation eigenständig einzubinden.
Meine Idee, ich richte dies an einer Stelle ein und binde alles was benötigt wird, in die jeweilige App ein. Dann brauche ich z.b. nicht in jeder App eine eigene Behandlung bauen, wenn z.b. ein Login nicht klappt.

Ob dieser Weg so klappt, hoffe wenn ich es nicht vergesse, werde ich hier nochmals berichten.
Also wie ich es, wie auch immer, zum laufen bekommen habe.

Viele Grüße
Chris
Antworten