gpt4 book ai didi

python - Pyramids 认证系统有多灵活?

转载 作者:行者123 更新时间:2023-11-28 16:49:28 26 4
gpt4 key购买 nike

我正在尝试使用 Pyramid 框架(伟大的框架),并且我已经到了用户授权的地步。我想利用 ACL 来阻止已经登录的用户访问注册页面。显然,我可以通过其他方式做到这一点,但我想知道是否有任何方法可以使用 Pyramid 中的工具来做到这一点。

我知道通过向 View 添加权限,不符合条件的用户会看到禁止查看的内容。就我而言,我只是想将已经是成员的用户重新路由到不适用于他们的 View (注册、登录等)。

我试过 __acl__ = [(Deny, Authenticated, 'guest')] 没有用,因为它阻止了所有用户的登录页面。

另外,还有一点要注意的是,有什么方法可以动态更改路线。我希望登录用户的主页与访客的主页不同。

最佳答案

您需要调查身份验证策略返回的委托(delegate)人以了解发生了什么。如果您在 INI 文件中打开 pyramid.debug_authorization 很容易判断。授权策略会将找到的 ACL 与通过 pyramid.security.effective_principals(request) 返回的主体进行比较。如果这些不匹配,应该清楚发生了什么。

实现基于表单的登录的方法是(假设 Pyramid 1.3a9+):

from pyramid.httpexceptions import HTTPSeeOther
from pyramid.security import authenticated_userid
from pyramid.view import forbidden_view_config

@forbidden_view_config()
def forbidden_view(request):
if authenticated_userid(request):
# user is already logged in, they are really forbidden
return request.context # the forbidden 403 response

url = request.route_url('login', _query={'came_from': request.path})
return HTTPSeeOther(url)

这会将 came_from 参数添加到登录 View 中的 URL 作为 request.GET['came_from']。当然,如果没有,您可以在登录后将他们重定向到主屏幕。

关于python - Pyramids 认证系统有多灵活?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9448228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com