作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们对 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/
我是一名优秀的程序员,十分优秀!