【发布时间】:2015-10-03 18:17:34
【问题描述】:
我正在尝试为特定持续时间的登录用户创建令牌,并使用 g.user 来跟踪当前用户。
generate_auth_token 和 verify_auth_token 属于 User 类。
但我不断收到此错误:
g.user.generate_auth_token(600) 'dict' 对象没有属性 'generate_auth_token'
def generate_auth_token(self, expiration=600):
s = Serializer(app.config['SECRET_KEY'], expires_in=expiration)
return s.dumps({'id': self.id})
@staticmethod
def verify_auth_token(token):
s = Serializer(app.config['SECRET_KEY'])
try:
data = s.loads(token)
except SignatureExpired:
return None # valid token, but expired
except BadSignature:
return None # invalid token
user = users.find_one({'username': userdata['username']})['_id']
return user
@auth.login_required
def get_token():
token = g.user.generate_auth_token(600)
return json.dumps({'token': token.decode('ascii'), 'duration': 600})
@auth.verify_password
def verify_password(username_or_token, password):
user = User.verify_auth_token(username_or_token)
if not user:
user = users.find_one({'username': username_or_token})
if not user or not pwd_context.verify(password, user['password']):
return False
g.user = user
return True
我犯了什么错误,在 pymongo 的烧瓶中进行令牌身份验证的最佳方法是什么?
【问题讨论】:
-
g.user是一个字典,而不是User实例。这可能是users.find_one()返回的内容。 -
您认为获取用户实例的最佳方式是什么。我正在参考这个博客来构建基于令牌的身份验证:blog.miguelgrinberg.com/post/…
-
博客中的技术扎实而且很棒。但是这里缺少您的 实现。我不知道
pymongo在这里是如何工作的,但显然它没有返回User类的实例。也许有一些技术可以将 Mongo 结果转换为 Python 类实例(就像您找到的教程中的 SQLAlchemy 所做的那样),但我自己没有使用过 Mongo,所以我无法回答那部分。
标签: python