Django使用自定义的authentication登录认证

Posted 阿里山QQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django使用自定义的authentication登录认证相关的知识,希望对你有一定的参考价值。

 

 

import ldap
class LDAPMgmt():
    def __init__(self):
        self.ldap_host = ‘xxx‘
        self.ldap_base_dn = ‘ou=xx,dc=xx,dc=xx,dc=xx‘
        self.root_cn = ‘cn=xx,dc=xx,dc=xx‘
        self.root_pw = ‘xx‘
        self.conn = ldap.initialize(self.ldap_host)
        self.conn.set_option(ldap.OPT_REFERRALS, 0)
        self.conn.protocol_version = ldap.VERSION3
        self.conn.simple_bind_s(self.root_cn, self.root_pw)

    def authenticate(self, username,password, scope=ldap.SCOPE_SUBTREE, attr=None):
        result = {}
        searchFilter = "uid=*" + username + "*"
        try:
            ldap_result = self.conn.search_s(self.ldap_base_dn, scope, searchFilter, attr)
            try:
                DN = ldap_result[0][0]
            except Exception,e:
                print(‘use %s not exist‘ %username)
                return False
            try:
                print self.conn.simple_bind_s(DN,password)
                return True
            except ldap.LDAPError,err:
                print err
                return False
        except ldap.LDAPError, e:
            print e
            return False
instance = LDAPMgmt()

  

 

@defend_attack
def Login(request):
    """登录界面"""
    error = ‘‘
    if request.user.is_authenticated():
        return HttpResponseRedirect(reverse(‘index‘))
    if request.method == ‘GET‘:
        return render_to_response(‘login.html‘)
    else:
        username = request.POST.get(‘username‘)
        password = request.POST.get(‘password‘)
        #print username,password
        if username and password:
            aa =  instance.authenticate(username,password)
            #user = authenticate(username=username, password=password,)
            if aa:
                #user = authenticate(username=username,password=password)
                from juser import models as usermodels
                user = usermodels.User.objects.filter(name=username)[0]
                if user:
                    user.backend=‘django.contrib.auth.backends.ModelBackend‘
                    if user.is_active:
                        login(request, user)
                        if user.role == ‘SU‘:
                            request.session[‘role_id‘] = 2
                        elif user.role == ‘GA‘:
                            request.session[‘role_id‘] = 1
                        else:
                            request.session[‘role_id‘] = 0
                        return HttpResponseRedirect(request.session.get(‘pre_url‘, ‘/‘))
                    else:
                        error = ‘用户未激活‘
                else:
                    error = ‘用户名或密码错误‘
            else:
                error = ‘用户名或密码错误‘
        else:
            error = ‘用户名或密码错误‘
    return render_to_response(‘login.html‘, {‘error‘: error})

  

以上是关于Django使用自定义的authentication登录认证的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.8 没有使用我的自定义登录页面

Django自定义模板函数

在不使用 Django 本身的情况下测试自定义 Django 中间件

Django的自定义标签

Django-Registration & Django-Profile,使用你自己的自定义表单

Django - 自定义 403 模板