• django 登录配置记录


    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>
    
    1. ajax的post方法中配置 xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));

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

  • 相关阅读:
    AngularJS(三)——指令实战及自定义指令
    AngularJS(二)——常见指令以及下拉框实现
    AngularJS(一)理论篇
    【leetcode】8 integer to roman
    【leetcode】7 Roman to Integer
    【leetcode】6 Palindrome Number
    【leetcode】5 atoi
    【leetcode】4 Reverse Ingeger
    【leetcode】3 minstack
    【leetcode】2 数组元素右移
  • 原文地址:https://www.cnblogs.com/luckyflower/p/7049854.html
Copyright © 2020-2023  润新知