【python开发bug记录】django2.0: auth模块的authenticate对is_active为0时,一直返回None解决办法

Django2.0用户认证疑难解析
本文详细探讨了Django2.0环境下使用auth模块进行用户认证时遇到的问题,尤其是在is_active字段为0时返回None的情况。文章提供了四种解决办法,包括正确使用create_user函数、调整settings配置以及使用check_password函数。

这个问题绕了我好久,不停的和老师的代码对照,一模一样,又看了看django2.0的官方认证文档,无解纳闷了~~~
后来网上搜索找到办法

0x00问题

相关bug代码
在确认数据库中存在该用户数据,并且我用户名和密码都是对的情况下,使用auth模块的authenticate认证,is_active=0时一直返回None,通过学习过程中了解到了一些解决办法。

0x01办法

法一:

使用django自带的auth.user类,在modles下自建的user下的账号,有时候authenticate() 会读取不到信息

  • 这个还没用到过,也不会用,放这以后可能用的着

法二:

在账号注册的时候,插入函数要用对,要用objects.create_user()函数,如果用objects.create插入时以明文保存的,authenticate()函数通过加密后再进行对比,所以读不到。

  • create_user() 这个函数会将密码自动加密,而不是明文保存
  • authencate() 会将输入的明文密码,自动加密,然后去数据库匹配,如果匹配成功返回一个user对象,如果不成功,返回None
user = authenticate(request, username=username, password=password)

user = User.objects.create_user(username, email, password)
  • 这个问题我稍微可以理解,主要是在开发中学了这几个函数

法三:

我在开发过程中就是这个问题,我太难了····
在我的版本django2.0下使用authenticate()验证会关联is_active字段。
当is_active=0时,默认不能通过我的第一个if判断(一图有标注),一直返回None。

  • 在settings.py文件中加入一段配置
# 让authenticate不关联is_active
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.AllowAllUsersModelBackend']

注:设置完这个后,重新运行程序没有用,得把pycharm关掉重新打开项目运行,并且之前通过注册写入数据库的数据不起作用,删了重新写入就好了,

  • 删除数据库的数据命令
python manage.py flush

法四:

假若以上三种方法都没能解决问题,还有可以通过check_password来帮助解决问题

第四种解决办法

### 解决 Elasticsearch 8.11.1 版本中 X-Pack Security 未启用导致无法自动设置密码的问题 在 Elasticsearch 8.x 中,默认启用了安全功能(X-Pack Security),但如果该功能被禁用,则会遇到类似于错误提示 `ERROR: X-Pack Security is disabled by configuration.` 的问题。以下是针对此问题的具体解决方案。 --- #### 启用 X-Pack 安全功能 要解决因 X-Pack Security 被禁用而导致的密码设置失败问题,需要按照以下步骤操作: ##### 修改配置文件 打开 Elasticsearch 的配置文件 `elasticsearch.yml`,通常位于 `/etc/elasticsearch/` 或安装目录中的 `config/` 文件夹下。找到或添加以下配置项以确保安全功能已启用: ```yaml xpack.security.enabled: true ``` 如果存在其他与安全相关的配置项(如 SSL/TLS 设置),也需要检查其正确性[^2]。 ##### 重启 Elasticsearch 服务 保存修改后的配置文件并重启 Elasticsearch 服务以应用更改: ```bash sudo systemctl restart elasticsearch ``` 或者,在某些环境中可能是: ```bash sudo service elasticsearch restart ``` 等待服务完全启动后,验证是否成功启用了安全功能。可以通过访问以下 URL 来测试: ```bash curl -XGET "http://localhost:9200/_security/_authenticate?pretty" ``` 如果没有返回认证信息而是报错,则说明安全功能尚未正常工作,请进一步排查日志文件[^3]。 --- #### 自动设置用户密码 一旦确认 X-Pack Security 已经启用,就可以使用内置工具为内置用户分配初始密码。 ##### 使用交互式命令设置密码 执行以下命令进入交互模式,按提示输入新密码: ```bash sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive ``` 这将引导您分别为各个内置角色(如 `elastic`, `kibana_system` 等)设定强密码[^1]。 ##### 使用自动化命令批量生成密码 如果您更倾向于自动生成随机密码而非手动指定,可运行以下命令: ```bash sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto ``` 这些密码会被打印到控制台供记录存档用途。 注意:以上两种方法均依赖于安全模块处于激活状态的前提条件。因此务必先完成前述关于开启 X-Pack Security 的调整[^4]。 --- #### 验证证书完整性 假如仍然遭遇连接异常或其他身份验证障碍,还应审查加密通信所需的 CA 及密钥材料是否存在缺失状况。标准布局应当类似如下结构[^5]: ``` /etc/elasticsearch/certs/ ├── ca │ ├── ca.crt │ └── ca.key ├── elasticsearch1 │ ├── elasticsearch1.crt │ └── elasticsearch1.key ├── http_ca.crt ├── http.p12 └── transport.p12 ``` 缺少任何组成部分都可能导致握手失败进而影响整体运作流畅度。 --- ### 总结 综上所述,当面对 Elasticsearch 8.x 版本由于 X-Pack Security 功能关闭所引发的一系列连锁反应,首要任务便是依据官方指导方针修正对应开关参数值;其次借助专门设计好的实用程序快速建立起基础防护屏障——即定义好必要的账号体系及其关联凭据集合。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值