Pyramid.security:从具有unauthenticated_userid(request)的数据库获取用户信息真的安全吗?

zak*_*ces 5 python security authentication pyramid

我正在尝试使用Pyramid doc的“ 使“用户对象”作为请求属性可用 ”示例来制作可访问的用户数据缓存。

他们正在使用以下代码将用户对象返回给set_request_property:

from pyramid.security import unauthenticated_userid

def get_user(request):
    # the below line is just an example, use your own method of
    # accessing a database connection here (this could even be another
    # request property such as request.db, implemented using this same
    # pattern).
    dbconn = request.registry.settings['dbconn']
    userid = unauthenticated_userid(request)
    if userid is not None:
        # this should return None if the user doesn't exist
        # in the database
        return dbconn['users'].query({'id':userid})
Run Code Online (Sandbox Code Playgroud)

我不明白为什么他们要使用unauthenticated_userid(request)从数据库中查找用户信息……不是很不安全吗?这意味着该用户可能未登录,那么为什么要使用该ID从数据库获取那里的私人信息?

不应该

    userid = authenticated_userid(request)
Run Code Online (Sandbox Code Playgroud)

用来确保用户已登录?使用unauthenticated_userid(request)有什么好处?请帮助我了解这里的情况。

Mar*_*ers 3

unauthenticated_userid电话是一个更便宜的电话;它从请求中查找用户 ID,而无需再次执行整个身份验证过程。

这里的关键概念是“再次”这个词。您应该只在已经授权的视图中使用该方法。换句话说,当您到达使用的代码时,unauthenticated_userid已经验证了用户,并且特别不想针对此特定调用再次执行此操作。

针对后端持久存储对用户进行身份验证的成本可能很高,尤其是在此类存储不支持缓存的情况下。APIunauthenticated_userid方法是一种优化,其中请求基本上是您的userid缓存。