【问题标题】:Eve framework: user restricted resource accessEve 框架:用户限制资源访问
【发布时间】:2017-05-09 21:52:55
【问题描述】:

我正在使用 Eve 框架,并尝试使用用户限制资源访问,如下所述: http://python-eve.org/authentication.html#user-restricted-resource-access

我正在做类似的事情:

class CustomAuth(TokenAuth):
    def check_auth(self, token, allowed_roles, resource, method):
        # Get user as an instance of UserResource.
        if user and hasattr(user, 'id'):
            self.set_request_auth_value(user['id'])
        request.authenticated_user = user
        ...

所以,我这边有几个问题:

  • 使用用户限制资源访问是否足够?
  • 如何将此字段添加到用户创建的对象中?
  • 我的用户创建的对象中是否有这个名为id 的附加字段?可以改名吗?
  • 据我了解,它的名称应与用户资源中的名称相同。是真的吗?
  • 此字段(属性)是否仅适用于新创建的对象?是否可以通过这种方式获取当前用户以前创建的对象?

好吧,我想知道我的问题的答案 + 澄清它的用途。

这是在我的钩子中以某种方式提取它的预期方式吗?

user_id = current_app.auth.get_request_auth_value()
current_app.data.driver.session.query(resource).find({'id': user_id})

这个来自钩子的代码块是预期的吗? 如果我请求的资源有自己的 id 字段,它的行为如何?

附:我正在阅读一个帖子: https://stackoverflow.com/a/35654252/7335432

【问题讨论】:

  • 各位,有什么想法吗?

标签: python authentication eve


【解决方案1】:

用户限制访问功能可防止用户访问不是他们创建的记录。 set_request_auth_value() 方法可以:

1) 在发出创建记录的 POST 请求时,它会自动添加一个指定为 AUTH_FIELD 的字段(如果您只想对特定资源执行此操作,则为 auth_field)。因此,例如,如果您在 settings.py 中声明

AUTH_FIELD = "my_auth_field"

然后添加

set_request_auth_value(user['id'])

对于您的身份验证方法,这意味着您的应用创建了一个字段“my_auth_field”,其值设置为任何用户[“id”]。因此,如果您要进入 Mongo Compass 或其他一些 DBMS 并手动检查您的记录,您会在其中看到一个“my_auth_field”字段。

2) 当您访问这些记录时,在 GET 请求中,Eve 会检查“my_auth_field”值是否与用户 [“id”] 相符,并且仅显示“my_auth_field”等于用户 [“id”] 的记录。由于此字段是在您使用 Eve 创建记录时自动添加的,因此它有效地过滤掉了特定用户未创建的所有内容。

所以是的,它只适用于新创建的对象。我不确定您所说的“是否足够”是什么意思,但看起来您的身份验证类中的任何地方都没有声明“用户”。您可能想查看this tutorial 他们确实将用户受限访问纳入令牌身份验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 2011-10-14
    相关资源
    最近更新 更多