Airflow 1.8密码认证配置执行user.password赋值时为何报AttributeError?
解决Airflow 1.8设置密码认证时的AttributeError问题
嘿,这个坑我之前维护老版本Airflow时踩过!直接给user.password赋值失败,是因为Airflow 1.8的User模型里,password是个只读的@property属性,根本不允许直接设置,得用官方提供的方法来操作。
问题根源
在Airflow 1.8的PasswordUser(或原生User模型)中,password被封装成了只读属性,直接赋值会触发AttributeError: can't set attribute,正确姿势是调用模型内置的set_password()方法来设置密码。
正确的密码设置步骤
- 先进入Airflow的交互式shell:
airflow shell - 在shell中执行以下代码创建/修改用户密码:
from airflow import models from airflow.contrib.auth.backends.password_auth import PasswordUser from airflow.utils.db import session # 创建新用户的情况 user = PasswordUser(models.User()) user.username = "your_username" user.email = "your_email@example.com" # 重点!用set_password方法设置密码,而非直接赋值user.password user.set_password("your_secure_password_here") # 修改已有用户的情况,先查询再更新 # user = session.query(models.User).filter(models.User.username == "existing_user").first() # user.set_password("new_secure_password") # 提交会话到数据库 session.add(user) session.commit()
配套认证配置检查
你提到认证设置也出现相同错误,别忘了确保airflow.cfg里的Webserver认证配置正确:
[webserver] # 开启认证开关 authenticate = True # 指定密码认证后端 auth_backend = airflow.contrib.auth.backends.password_auth
配置完成后,记得重启Airflow Webserver服务,让设置生效。
额外提醒
- Airflow 1.8是比较老旧的版本,后续版本(比如1.10+)的密码设置方式可能不同,但针对1.8版本必须用
set_password()方法; - 操作时确保Airflow数据库连接正常,提交会话没有报错,否则密码不会被保存到数据库中。
内容的提问来源于stack exchange,提问作者DanT
相关产品推荐
相关产品推荐

