【问题标题】:Token based authentication in FlaskFlask 中基于令牌的身份验证
【发布时间】:2015-10-03 18:17:34
【问题描述】:

我正在尝试为特定持续时间的登录用户创建令牌,并使用 g.user 来跟踪当前用户。

generate_auth_tokenverify_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


【解决方案1】:

User 类需要一个 Object-Document-Mapper。

试试这个

  • 使用 MongoEngine 作为您的 ODM。 (还有其他选项,例如 MongoFrames)

这是一个使用 MongoEngine 作为 ODM https://github.com/timosville/rest_auth_mongodb 的工作示例

【讨论】:

    【解决方案2】:

    User 类中定义generate_auth_token 方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-25
      • 2016-01-23
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-19
      • 2019-09-03
      相关资源
      最近更新 更多