2012-02-07 10 views
10

W dokumentacji piramidy samouczek wysyłania Sqlalchemy wykorzystuje dane fikcyjne w security.py. Musiałem użyć danych mysql więc realizowane to tak:Użycie uwierzytelniania piramidy za pomocą piramidy

mój login Kod

@view_config(route_name='login', renderer='json',permission='view') 
def user_login(request): 
    session = DBSession 
    username = request.params['username'] 
    password = request.params['password'] 
    sha = hashlib.md5() 
    sha.update(password) 
    password = sha.digest().encode('hex') 
    user = session.query(Users).filter(and_(Users.username==username,Users.password ==password)).count() 
    if(user != 0): 
     headers = remember(request, username) 
     return HTTPFound(location = '/index/', 
          headers =headers) 
    else: 
     print "error" 

Powyższe sprawia, że ​​system zapamiętać nazwę użytkownika, która będzie używana w security.py. Poniżej używam tego, aby uzyskać grupę, w której znajduje się użytkownik.

from .models import (
    DBSession, 
    Users, 
    ) 

def groupfinder(userid, request): 
    session = DBSession() 
    for instance in session.query(Users).filter(Users.username==userid): 
     group = 'group:'+instance.group 
     lsth = {'userid':[group]} 
     return lsth.get ('userid') 

Czy to najlepszy sposób na użycie autoryzacji piramidy?

+0

Muszę powiedzieć, że ten kod jest naprawdę dobrym krótkim wprowadzeniem do tego, jak działa uwierzytelnianie SQLAlchemy (lub może działać). – phsource

Odpowiedz

14

Masz odpowiedni pomysł.

Twój celownik jest teraz zepsuty. Zwróć uwagę, że masz pętlę for z instrukcją return wewnątrz. W przypadku, gdy użytkownik jest ważny, groupfinder powinien zwrócić co najmniej pustą listę []. Zwróć tylko None, jeśli użytkownik jest nieważny.

Również md5 hasła jest obecnie bardzo kiepskie. Spójrz na biblioteki cryptacular lub passlib, aby zamiast tego wykonać kryptograficzny hasz przez bcrypt.

+0

dzięki za heads up na md5 myślę, że źle wykorzystam passlib – Madawar

Powiązane problemy