Seite 1 von 2

[bottle] Loginsystem

Verfasst: Dienstag 10. August 2010, 13:52
von Sync32
Wie bau ich mir mit Bottle am besten ein Login-System?
Aus den kleinen Codeauszug bzgl Sessions in der FAQ von der Bottleseite werde ich nicht ganz schlau.
DAnke für eure Hilfe.

Re: [bottle] Loginsystem

Verfasst: Dienstag 10. August 2010, 14:08
von Sync32
Ahh hab gerade das Logging module gefunden:
http://docs.python.org/library/logging.html

werde es mir mal angucken.

Re: [bottle] Loginsystem

Verfasst: Dienstag 10. August 2010, 14:12
von nemomuk
da waren dann wohl 2 G's zu viel im Begriff...

Re: [bottle] Loginsystem

Verfasst: Dienstag 10. August 2010, 14:27
von Sync32
Oh ja stimmt. Ich glaub ich geh erstmal nen Kaffee trinken *grrr

Aber welche Vorgehnsweise würdet ihr mir nun empfehlen?

Re: [bottle] Loginsystem

Verfasst: Dienstag 10. August 2010, 14:50
von Hyperion
Ist jetzt keine direkte Lösung, aber nach den Problemen, die Du hier schon hattest, willst Du Dir evtl. doch mal flask angucken. Das bietet Dir ein eigenes Session-System und in der Doku ist das auch gut erklärt.

Re: [bottle] Loginsystem

Verfasst: Dienstag 10. August 2010, 16:06
von jbs
Du kannst auch einfach mit der session middleware arbeiten.

Da sollte auch ein Beispiel zu finden sein...


Edit: Ha, wer sagts denn: http://bottle.paws.de/page/faq

Re: [bottle] Loginsystem

Verfasst: Dienstag 10. August 2010, 16:09
von Hyperion
jbs hat geschrieben: Edit: Ha, wer sagts denn: http://bottle.paws.de/page/faq
Genau das hat der OP ja nicht verstanden ;-)

Re: [bottle] Loginsystem

Verfasst: Dienstag 10. August 2010, 16:18
von jbs
Mal wieder zu schnell gelesen :(


Zur FAQ:

Du brauchst eine Middleware, da bottle selber keine Session anbietet. Das heißt du schaltest was dazwischen, dass das kann. Es ändert sich aber das app Objekt, da es ja nun auch sessions verwalten soll. Diese app musst du bottle dann bekannt machen.

Wie man die Middleware nutzt, liest du dann hier nach: http://beaker.groovie.org/sessions.html

Re: [bottle] Loginsystem

Verfasst: Dienstag 10. August 2010, 19:34
von noisefloor
Hallo,

was willst du den loggen?

BTW: wenn du auch "Aktionen" der Nutzer loggen willst, brauchst wohl zusätzlich zum Logging ein Log-In. :D

Gruß, noisefloor

Re: [bottle] Loginsystem

Verfasst: Mittwoch 11. August 2010, 15:04
von Sync32
was willst du den loggen?
Eigentlich nichts. Hab mich nur verschrieben *hehe*

Noch mal zum Thema: LOGIN ;):

Ich habe mir nun mal diese Middleware Beaker angeguckt bzw. auch eingespielt.
Und das Beispiel da auf der Seite verstehe ich auch fast außer:

Code: Alles auswählen

start_response('200 OK', [('Content-type', 'text/plain')])
???

Naja auf jeden Fall die Frage , die ich mir stelle ist:
Wie ich eine Session starte und fülle und abfrage (im .py), sollte soweit klar sein aber wie schütze ich denn meine generierten html Seiten?
Wenn ich z.B. eine Adminseite mache, muss ich doch vorher irgendwie abfragen können ob ne Session existiert oder nicht, damit er ggf. den Inhalt NICHT lädt.

Re: [bottle] Loginsystem

Verfasst: Donnerstag 12. August 2010, 10:03
von Sync32
Niemand ne Idee wie man eine Login-Abfrage für den Adminbereich meines Gästebuches lösen kann?

Also nochmal zur Erkärung:

Ich habe eine Seite /admin wo Links generiert werden:

Lösche Beitrag X
Lösche Beitrag X
Lösche Beitrag X
Lösche Beitrag X
Lösche Beitrag X


So diese Links sollen dritte Person nicht sehen geschweige nicht ausführen.
D.h. er soll die Seite nur generieren wenn man sich eingeloggt hat.
Und ansonsten einfach wieder zur Startseite umlenken oder ne Error-Meldung ausgeben.


In PHP kann man oben im Html-Dokument bzw. php file abfragen , ob ne Session gestartet wurde oder nicht.

Re: [bottle] Loginsystem

Verfasst: Donnerstag 12. August 2010, 12:31
von noisefloor
Hallo,

du kannst das über eine verschlüsselten Cookie lösen, in dem dann z.B. der Nutzername gespeichert wird in bei bestimmten Seiten geprüft wird, ob dieser Nutzer berechtigt ist, sie zu sehen.

Wenn die Anwendnungen auf einem Webserver läuft kannst du auch Auth-Basic Infos mit Bottle auswerten.

Gruß, noisefloor

Re: [bottle] Loginsystem

Verfasst: Donnerstag 12. August 2010, 14:40
von Sync32
du kannst das über eine verschlüsselten Cookie lösen, in dem dann z.B. der Nutzername gespeichert wird in bei bestimmten Seiten geprüft wird, ob dieser Nutzer berechtigt ist, sie zu sehen.
Ok und wie verschlüssel ich den richtig? Hab schon alles mögliche versucht aber er zeigt mir trotzdem immer problemlos den Wert an:

Code: Alles auswählen

@route('/test')
def test():
    response.set_cookie("mykey", "1234" secret=1)
    #return request.get_cookie("mykey")
    return request.get_cookie("mykey")

Re: [bottle] Loginsystem

Verfasst: Donnerstag 12. August 2010, 15:23
von Sync32
Ah, hab mein Fehler gefunden.
Habs falsch geschrieben.

Aber nun nochmal meine Frage:
Was bringt "secure=True" eigentlich? Da steht in den Cookieeinstellung nur "verschlüsselt". Aber mehr auch nicht.
Ich kann nach wie vor den Cookie_value einsehen.

Frage ist, was bringt der eigentlich?

Zweite Frage:
Wenn ich kein "expires" setze, verfällt der Cookie nach meiner Browsersitzung.
Ist das eine Defaulteinstellung und überall so?

Dritte_Frage:
Gibts ne Funktion, wo ich ein Cookie auf "Knopfdruck" löschen kann?

Re: [bottle] Loginsystem

Verfasst: Donnerstag 12. August 2010, 16:31
von BlackJack
@Sync32: Wo kannst Du denn das verschlüsselte Cookie lesen? Ich denke es geht darum, dass der Besucher der Webseite es seinem Browser nicht lesen kann, denn sonst könnte er es ja bei sich einfach so ändern, dass er zum Beispiel Adminrechte in Deiner Webanwendung bekommt.

Re: [bottle] Loginsystem

Verfasst: Donnerstag 12. August 2010, 17:37
von jbs
Warum machst du das nicht in etwa so?

Code: Alles auswählen

users = dict(name='foo', level=1), dict(name='admin', level=0)



import bottle
from bottle import route, run, get

s = lambda: bottle.request.environ.get('beaker.session')

@get('/make-me-admin')
def make_me_admin():
    s()['id'] = 1
    s().save()
    return 'Now you are an admin!'

@get('/secret')
def secret():
    id = s().get('id', -1)
    print id
    if id >= 0 and users[id]['level'] == 0:
        return 'Hello Admin'
    return 'Not allowed!!!' 
    

from beaker.middleware import SessionMiddleware

app = bottle.default_app()
session_opts = {
    'session.type': 'file',
    'session.cookie_expires': 300,
    'session.data_dir': './data',
    'session.auto': True
}
app = SessionMiddleware(app, session_opts)


run(app=app, reloader=True)

Re: [bottle] Loginsystem

Verfasst: Freitag 13. August 2010, 09:27
von Sync32
Danke für dein Beispiel.
Hab aber nun auch eine gute Lösung gefunden mit den Cookies.
Hab nur ein Problem:

Wenn ich den Cookie, wie mir empfohlen, verschlüsselt (secure = true) setze, ist er zwar verschlüsselt aber denn kann ich ihn anschließend selber nicht mehr mit
request.get_cookie("mycookie")
auslesen??? Was ich ja muss

Re: [bottle] Loginsystem

Verfasst: Freitag 13. August 2010, 09:35
von BlackJack
@Sync32: Ist die Frage ernst gemeint!? Natürlich müsstest Du beim Auslesen dann auch den Schlüssel zum entschlüsseln angeben. Wenn das ohne ginge, könnte das ja jeder machen.

Re: [bottle] Loginsystem

Verfasst: Freitag 13. August 2010, 09:49
von Sync32
auch den Schlüssel zum entschlüsseln
Wie meinst du das jetzt genau?

Re: [bottle] Loginsystem

Verfasst: Freitag 13. August 2010, 10:15
von BlackJack
@Sync32: Schau Dir mal die Dokumentation von `set_cookie()` und `get_cookie()` an und welche Argumente man da übergeben kann. Wie hast Du denn `set_cookie()` aufgerufen?