gpt4 book ai didi

python - 如何从 Django 身份验证后端重定向

转载 作者:行者123 更新时间:2023-12-02 06:39:14 25 4
gpt4 key购买 nike

我们对 django web 应用程序使用自定义身份验证,我们在其中访问了公司 ldap。由于我们使用的是自定义后端,因此我们似乎只能返回 None 或数据库中用户的用户名。

def authenticate(self,username,password):
"""
Authenticate the username credentials, and return the
"""
try:
self.ldap.simple_bind_s(username+"@"+settings.AUTH_LDAP_DOMAIN,password)
self.ldap.unbind_s()

except ldap.INVALID_CREDENTIALS:
logger.debug("Invalid credentials used for login.")
username = None
except ldap.SERVER_DOWN, e:
logger.debug("Ldap server is down.")
username = None

return username

显然,这里存在三种不同的用例 - 一种是可以工作的,一种是因为凭据无效而不能工作的,另一种是服务器停机的。 Django 的自定义后端似乎只真正处理其中的两个 - 无效凭据或有效凭据。我如何重定向到错误页面,或通知用户 ldap 已关闭?

最佳答案

我会考虑在您的身份验证后端中引发自定义异常,并在您的登录 View 中捕获它。从您的身份验证后端返回 None 只是意味着“我无法验证这些凭据 - 尝试下一个后端”。

所以,用伪代码来说,

class LoginView(TemplateView):
def post(self, request):
try:
user = authenticate(request.POST['username'], request.POST['password'])
except MyCustomLdapError:
return HttpResponseRedirect('ldap_server_unavailable.html')
else:
if user:
return HttpResponseRedirect('logged_in.html')
else:
return HttpResponseRedirect('login_failed.html')

在现实生活中,您当然会使用表单来验证其中的一些内容 - 但您明白了。

关于python - 如何从 Django 身份验证后端重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6374584/

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