zoukankan      html  css  js  c++  java
  • authenticate的执行流程与重写

    流程

    1.authenticate调用的是_get_backends函数
    def authenticate(request=None, **credentials):
        for backend, backend_path in _get_backends(return_tuples=True):
    		pass
    
    2._get_backends,默认使用全局配置
    def _get_backends(return_tuples=False):
        backends = []
        for backend_path in settings.AUTHENTICATION_BACKENDS:
            pass
    
    3.global_settings.py 使用django.contrib.auth.backends下的ModelBackend的类

    djangoconfglobal_settings.py

    AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend']
    
    class ModelBackend:
        def authenticate(self, request, username=None, password=None, **kwargs):
    		pass
    
    

    重写(实现username或email登录验证)

    可以在项目的setting中重写设定
    AUTHENCICATION_BACLENDS = ['users.views.CustomBackend',]
    

    users下的views.py

    from django.contrib.auth.backends import ModelBackend
    from .models import UserProfile
    from django.db.models import Q
    
    class CustomBackend(ModelBackend):
        def authenticate(self, request, username=None, password=None, **kwargs):
            try:
                user = UserProfile.objects.get(Q(username=username)|Q(email=username))
                if user.check_password(password):
                    return user
            except Exception as e:
                return None
    # UserProfile继承AbstractUser
    

    当调用auth中的authenticate将执行上面的方法

    from django.contrib.auth import authenticate
    def user_login(request):
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
            user = authenticate(username=username,password=password)
            # .......
    
  • 相关阅读:
    mySQL教程 第1章 数据库设计
    数学符号大全
    C# 正则表达式 判断各种字符串(如手机号)
    C# 面向对象编程
    博客园 网址
    优化正则表达式的诀窍
    hdu 1596 floyd
    poj3259,简单判断有无负环,spfa
    hdu 1496 hash
    hdu 1429 bfs+二进制状态压缩
  • 原文地址:https://www.cnblogs.com/notfind/p/11962162.html
Copyright © 2011-2022 走看看