2012-02-07 115 views
10

在金字塔文檔中,Sqlalchemy Dispatch教程使用security.py中的虛擬數據。我需要使用MySQL的數據,所以我實現它是這樣的:在金字塔中使用金字塔認證

我登入碼

@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" 

以上,使系統記住用戶名,將在security.py使用。下面,我用這個來獲得該組的用戶是英寸

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') 

這是使用金字塔授權的最好方法?

+0

我不得不說,這段代碼對於SQLAlchemy身份驗證如何工作(或可以工作)是一個很好的簡要介紹。 – phsource 2012-05-31 18:45:20

回答

14

你有想法的權利。

您的羣組搜索器現在被打破。注意你有一個帶有return語句的for循環。如果用戶有效,羣組搜索器應返回至少空列表[]。如果用戶無效,只返回None

此外密碼的MD5是相當糟糕的這些天。查看cryptacular或passlib庫,以便通過bcrypt執行加密散列。

+0

感謝您對md5的支持,我認爲使用passlib – Madawar 2012-02-07 13:58:04