码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-03-16 18:41:14      阅读:490      评论:0      收藏:0      [点我收藏+]

标签:mode   url   rect   reverse   _id   direct   use   search   arc   

 

 

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登录认证

标签:mode   url   rect   reverse   _id   direct   use   search   arc   

原文地址:http://www.cnblogs.com/cqq-20151202/p/6116506.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!