在金字塔文档中,Sqlalchemy Dispatch Tutorial使用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 :(得分:14)
你有这个想法。
您的群组查找器现在已被破坏。注意你有一个带有return语句的for循环。如果用户有效,则groupfinder应返回至少空列表[]
。如果用户无效,则仅返回None
。
这些天密码的md5也很糟糕。查看加密或passlib库,以通过bcrypt执行加密哈希。