Django源码学习-登录注册流程1

1)authenticate(request=None, **credentials)
**credentials:字典对象,传入的是账号密码;
{'username':'admin','password':'xxxxxxx'}

2)_get_backends()函数中关于settings.AUTHENTICATION_BACKENDS
实际上是settings重写了get方法;

    def __getattr__(self, name):
        """Return the value of a setting and cache it in self.__dict__."""
        if self._wrapped is empty:
            self._setup(name)
        val = getattr(self._wrapped, name)
        self.__dict__[name] = val
        return val

_wrapped在加载时就会从Django的全局配置文件读取内容,全局配置文件在django.conf.global_settings中,默认是
django.contrib.auth.backends.ModelBackend,专门负责处理权限相关。

3)运行时已经读取了settings的内容,getcallargs配置了部分参数,user = backend.authenticate(request, **credentials)时,实际上访问的是'django.contrib.auth.backends.ModelBackend'authenticate方法,进行密码验证。

4)验证密码时,读取的全局定义的已经读入setting的密码路径序列

['django.contrib.auth.hashers.PBKDF2PasswordHasher', 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', 'django.contrib.auth.hashers.Argon2PasswordHasher', 'django.contrib.auth.hashers.BCryptSHA256PasswordHasher']

5)import_string反射类专用函数

6)get_hashers()获得了反射完的加密对象数组,取第一个进行加解密,默认使用对象PBKDF2PasswordHasher,具体算法是algorithm = "pbkdf2_sha256"

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容