我为我的应用程序创建了一个自定义后端,以便人们使用ldap登录。除了一件事情,似乎一切都在工作: 我正在检查模板中的“ user.is_authenticated”是否显示已通过身份验证的用户的“注销” 按钮,并且似乎一直在返回false。
我正在使用标准的django LoginView。在添加我的自定义后端之前,所有功能都工作正常,并且我只重写了“ authenticate()” 函数,其功能与Django文档中的说法相同。
我该如何解决?
我的后端是:
class MyBackEnd(object):
"""
This is the custom backend to authenticate the user in the DB.
if this authentication fais then django default authentication will get called
"""
def authenticate(self, request, username, password):
#here comes server address and search templates
try:
return User.objects.get(username=username)
except User.DoesNotExist:
try:
l = ldap.initialize(server)
l.protocol_version = 3
l.set_option(ldap.OPT_REFERRALS, 0)
l.simple_bind_s(username, password)
r = l.search(base, scope, filter, attrs)
type, user = l.result(r, 60)
if len(user) == 1:
user = User.objects.create_user(username=username, password=password)
user.save()
return user
except:
print("Failed to connect with ldap")
return None
def get_user(self, user_id):
try:
return User.objects.get(username=user_id)
except User.DoesNotExist:
return None
答案 0 :(得分:1)
在功能get_user
中:
return User.objects.get(username=user_id)
username
在用户模型中代表主键吗?
尝试以此替换以下行:
return User.objects.get(pk=user_id)