Djangoauthldap在自定义vi中显示来自LDAP的用户信息

2024-10-01 13:38:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用django auth ldap进行以下设置,因为ldap服务器上没有默认/全局“admin”用户,它只用于验证用户,用户自己可能会看到他们的用户信息。在

AUTH_LDAP_BIND_AS_AUTHENTICATING_USER=True

django-ldap-debug.log中,当(作为登录用户)在视图中调用LDAPBackend().populate_user(request.user.username)时,出现以下错误

^{pr2}$

只有在登录(使用login_requireddjango.contrib.auth.decorators)时,它才会返回一个用户对象,它似乎是:

search_s('uid=vchrizz,ou=Users,dc=funkfeuer,dc=at', 0, '(objectClass=*)') returned 1 objects: uid=vchrizz,ou=users,dc=funkfeuer,dc=at

然后我注意到,我需要设置

AUTH_LDAP_BIND_DN
AUTH_LDAP_BIND_PASSWORD

为了消除这个错误,但是首先我不想用密码指定用户(因为bind_as_authenticating_user),第二个populate\u user()仍然返回NoneType。。。在

为什么?如何从ldap获取返回的用户信息?在

我的目标是在我的自定义/userinfo/视图中显示来自ldap用户的所有ldap用户信息,比如uidNumber。 http://pastebin.com/VqGiwzFE

谢谢,克里斯


Tags: django用户auth视图信息uidbind错误
1条回答
网友
1楼 · 发布于 2024-10-01 13:38:31

最后auth.authenticate不见了,我不得不重新开始:

Storing additional information about users 这是获取用户信息的首选方式,而不是我所寻找的方式。在

在设置.py公司名称:

AUTH_LDAP_PROFILE_ATTR_MAP = {
    "uid": "uid",
    "cn": "cn",
    "sn": "sn",
    "givenName": "givenName",
    "userPassword": "userPassword",
    "shadowLastChange": "shadowLastChange",
    "shadowMax": "shadowMax",
    "shadowWarning": "shadowWarning",
    "loginShell": "loginShell",
    "uidNumber": "uidNumber",
    "gidNumber": "gidNumber",
    "homeDirectory": "homeDirectory",
    "gecos": "gecos",
    "mail": "mail",
    "l": "l",
    "telephoneNumber": "telephoneNumber",
}
AUTH_PROFILE_MODULE = 'myapp.UserProfile'

在模型.py公司名称:

^{pr2}$

在py.py视图公司名称:

from django.contrib.auth.decorators import login_required
from django.http import HttpResponseRedirect
from django.shortcuts import render
from myapp.models import UserProfile

@login_required
def userinfo(request):
    try:
        ldapuserprofile = UserProfile.objects.get(uid=request.user.username)
    except UserProfile.DoesNotExist:
        return HttpResponseRedirect('/login/')
    context = {'request': request, 'ldapuser': ldapuserprofile,}
    return render(request, 'myapp/userinfo.html', context)

然后在html模板中可以访问{{ ldapuser.givenName }}

也许这对某人有帮助。在

谢谢,克里斯

相关问题 更多 >