Baňky, hlavní návod (auth + authr)

hlasů
25

Ví někdo o dobré tutorial o baňce-jistiny? Snažím se dělat autentizaci a autorizaci (needRole a needIdentity) a já jsem nedostal nikde.

Jsem si skoro jistý, že to není opravdu komplexní výukový program - možná někteří z vás má nějaký čas na jejich rukách a chtěl bych psát výukový-as-odpověď? Jsem opravdu rozhodnut použít baňku místo Django, ale je třeba to napravit.

Položena 13/08/2011 v 12:28
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
6

Jediný, kdo se zdá, že tento blog post .

Webové stránky projektu je (velmi krátká) konzultace, následuje kompletní dokumentace API. Vaše otázka naznačuje, že jste už viděl.

Mohlo by vás zajímat baňce-login , který poskytuje správu relací a také vztahuje v připojeném blogu.

Je nepravděpodobné, že tady někdo bude mít zkušenosti s ním (a čas sdílet v detailu), ale jsem pro seminární-as-odpověď.

Odpovězeno 13/08/2011 v 12:42
zdroj uživatelem

hlasů
46

Vím, že tato otázka je trochu starý, ale před pár dny jsem hledal stejnou věc, takže doufejme, že to pomůže někdo v budoucnu. , ,

Dobré místo pro start je na na GitHub repo pro láhev-Principal .

Měl jsem nějaké problémy s baňky-Principal (FP) taky. Pokud jste novým dekoratéry , kontextových manažerů a signály, budete pravděpodobně chtít, aby jim výzkum krátce před použitím FP.

Baňka registruje signály založené na balíčku s názvem Blinker . Pokud nemáte Blikač se Flask ještě umožní deklarovat signály, které však nebude dělat nic . Chcete-li zjistit, co mám na mysli, podívejte se na zdroje pro láhev je signals.py .

Tak proč tuto záležitost pro FP? No, to ukáže, že FP využívá signály registrovat a aktualizovat identitu. konkrétně:

  1. identity_loaded: Je-li tento signál nazývá víme vytvořit objekt identity uživatele. (Je to nazývají via Principal._set_thread_identity())

  2. identity_changed: Je-li tento signál nazývá víme aktualizovat identitu uživatele. (Když se to jmenuje ho spustí Principal._on_identity_changed() )

Tak co mám na mysli volal ? Za prvé, musíme vědět, jak jsou signály nastavit. Blikač funguje tím, že funguje tak, že „přihlásit“ na signály. Tak, například, Principal._on_identity_changed()je nastaven jako účastníka pro signál identity_changed. Kdykoli je signál identity_changedje poslán, _on_identity_changed () je vykonán. Tento kód vypadá takto:

from blinker import signal

test = signal('test') 
test.connect(func_we_want_to_execute_when_signal_is_called)

Zpět k otázce, jak jsou signály nazývá. V blikač, signály manipulátory jsou prováděny, když říkáme send()o objektu signálu. Takže pro nás testsignálem, syntaxe je právě:

test.send()

Když test.send()se nazývá func_we_want_to_execute_when_signal_is_calledspustí. Doufejme, že tento příklad v dokumentaci FP dělá trochu větší smysl teď:

def login_view(req):
    username = req.form.get('username')
    # Your authentication here.

    # Notice our signal (identity_changed) is being called (identity_changed.send())
    # What function is being called? Principal._on_identity_changed()
    identity_changed.send(app, identity=Identity(username)) 

Nicméně můžeme zjednodušit zakládání signály, pokud budeme používat malíř, aby to pro nás. Znovu předstírat, že jsem nastavit můj testovací signál, ale ještě není připojen ji. Můžeme udělat:

@test.connect
def func_we_want_to_execute_when_signal_is_called():
    return stuff

Co se výše uvedený kód dělá, je v podstatě nastaví funkci, kterou chceme spustit, když je poslal náš testovací signál. Doufejme, že nyní následující kód z dokumentace FP dává smysl:

# We're setting up our signal (identity_loaded) 
# to execute the function below (on_identity_loaded) 
# when we call our signal (identity_loaded.send())
# which is called in Principal._set_thread_identity()
@identity_loaded.connect 
def on_identity_loaded(sender, identity):
    # Get the user information from the db
    user = db.get(identity.name)

    # Update the roles that a user can provide
    for role in user.roles:
        identity.provides.add(RoleNeed(role.name))

    # Save the user somewhere so we only look it up once
    identity.user = user

Takže můžete vidět, že signál skutečně řídit proces identity. Rolí a oprávnění jsou opravdu (jednodušší) nápad, pokud hledáte způsob, jak dělat povolení jakéhokoli druhu vás.

Pro mě, balení hlavu kolem signálů byla ta nejtěžší část; Doufám, že to bylo užitečné pro někoho jiného, ​​také. Ale já bych opravdu doporučujeme pročíst zdrojového kódu jsem odkazovaných výše Baňka-Principal; je to asi bude nejlepší způsob, jak pochopit, co se děje.

Odpovězeno 20/03/2012 v 06:14
zdroj uživatelem

hlasů
4

Z nějakého důvodu existuje velmi málo příkladů na principu baňce venku. Osobně jsem našel Baňka-Principal dokumentaci kryptické začít. Jednou jsem prošel zdrojový kód vše se zdálo, aby se vešly na místo lepší.

Inspirovaný těmito 2 odkazy, které jsem byl schopen najít, tady a tady , dal jsem dohromady jednoduchý příklad použití baňka-login, Baňka-principy a plány

https://github.com/shankararul/flask-login-principal

Snažil jsem se co nejlépe vysvětlit tento post zde. Pokud máte jakýkoliv feedbck, prosím, dejte mi vědět a já můžete upravit / aktualizovat příspěvek

https://medium.com/@shankararul/a-shot-at-demystifying-flask-principal-dda5aaeb6bc6

Odpovězeno 02/11/2014 v 03:05
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more