user.is_authenticated返回False,带有自定义后端

时间:2018-12-21 12:52:24

标签: django authentication

我为我的应用程序创建了一个自定义后端,以便人们使用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

1 个答案:

答案 0 :(得分:1)

在功能get_user中:

return User.objects.get(username=user_id)

username在用户模型中代表主键吗? 尝试以此替换以下行:

return User.objects.get(pk=user_id)