我正在使用Eve框架,我正在尝试使用User-Restricted资源访问,如下所述: 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
字段,它的行为如何?
P.S。我正在读一篇文章: https://stackoverflow.com/a/35654252/7335432
答案 0 :(得分:0)
用户限制访问功能可防止用户访问他们未创建的记录。 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他们确实将用户限制访问合并到令牌身份验证中。