django 登录配置记录

本文介绍如何在Django Web应用中使用LDAP进行用户认证,并通过自定义中间件实现登录拦截器,确保未登录用户无法访问特定资源。此外,还讨论了CSRF保护机制及其在前端的实现。

django搭建的web系统中有一个使用ldap校验用户的需求。
之前Java web项目的后台中使用filter防止用户访问一些未授权的资源,比如一个用户未登录则不能访问某些页面。

搜了下django,自带的也有一套认证机制,但是都是要配合数据库使用的。我这里用的ldap,且校验部分的我并不接触,只是去调用其他后台接口获取结果即可。所以使用自带的认证机制配置也有很多问题。
想起filter便搜索了下django中中间件的配置,利用中间件实现登录拦截器 (ps:感谢作者~~)

配置的步骤也很简单,2步即可:
1) 自定义的拦截器
2) settings中middleware添加上1)步骤中的自定义拦截器

    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        '...',
        'A.B.SimpleMiddleware' #自定义的拦截器
        ]

自定义拦截器的写法,具体参见官方文档

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    from django.shortcuts import render,HttpResponse,redirect,HttpResponseRedirect

    try:
        from django.utils.deprecation import MiddlewareMixin  # Django 1.10.x
    except ImportError:
        MiddlewareMixin = object  

    class SimpleMiddleware(MiddlewareMixin):
        def process_request(self, request):
            next = request.path
            request.session.set_expiry(10*1) #django will not expire the session itself with setting
            loginCheckUrls = ['/company/manager']

            if (request.path in loginCheckUrls):
                if  request.session.get('user',None):
                    pass
                else:
                    return redirect('/company/login/?next='+next)
            else:
                pass

如此一来所有请求过来时都会先经过一道filter,如果该页面有访问权限控制且用户未登录时,自动跳转到登录页面,校验成功后再返回页面。校验失败时给出失败提示,始终位于login页面而不跳转。
至于判断用户是否登录,可以通过session来进行判断。当未登录时session中没有user,登录后session中存有user的value。可以设置session的过期时间,一定时间后相当于自动登出。

其中在设置中间件的时候发现了django自带的有CSRF(Cross Site Request Forgery, 跨站域请求伪造)安全校验。只要配置了该中间件,对页面的ajax请求和form表单进行安全校验。前端在处理时需要注意如下两个地方:

1)form中需要添加csrf token。

    <form action="/webbacklog/loginHandle/" method="post">
             {% csrf_token %}
             <input type="text" name="username"/>
             <input type="text" name="password"/>
        </form>

2) ajax的post方法中配置 xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));

关于涉及到的一些知识,参见:
CSRF

转载于:https://www.cnblogs.com/luckyflower/p/7049854.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值