Airflow基本身份验证-无法使用创建的用户登录

时间:2018-08-13 12:19:24

标签: flask airflow

我的情况与此处Airflow basic auth - cannot create user

类似

所以,我这样创建用户:

import airflow
from airflow import models, settings
from airflow.contrib.auth.backends.password_auth import PasswordUser
user = PasswordUser(models.User())
user.username = 'new_user_name'
user.email = 'new_user_email@example.com'
user._set_password = 'set_the_password'.encode('utf8')
session = settings.Session()
session.add(user)
session.commit()
session.close()

并创建用户。金田 如果我退出python shell并再次启动它,我可以看到用户正在使用

session.query(PasswordUser).all()

session.query(models.User).all()

但是当我尝试登录时,出现“错误的登录详细信息”。我检查了所有可以从气流中获取的日志,但一无所获。只是要求一线。 另外,我检查了我使用的postgres db。由于某种原因,表“用户”为空。尽管如果删除此表,用户创建失败,所以我什至不知道该用户保存在哪个位置。

2 个答案:

答案 0 :(得分:1)

因此,我发现从控制台运行气流时,它使用的Web数据库与在Web服务器上运行的数据库不同。我使用此https://github.com/puckel/docker-airflow作为样板在docker中设置实例。因此,如果我在某个dag任务中插入所需的脚本并从Web服务器运行它,则它会正确填充我的postgres数据库,然后可以使用创建的用户登录。 为什么在控制台中使用了完全不同的数据库-我仍然不知道,这是另一个问题。

答案 1 :(得分:1)

我只是发生了完全相同的事情...而且我只是像这样使用正确的URI字符串...

import airflow
from airflow import models, settings
from airflow.contrib.auth.backends.password_auth import PasswordUser
user = PasswordUser(models.User())
user.username = 'user'
user.email = 'user@email.com'
user.password = 'password'

# the secret sauce is right here
from sqlalchemy import create_engine
engine = create_engine("postgresql://airflow:airflow@postgres:5432/airflow")

session = settings.Session(bind=engine)
session.add(user)
session.commit()
session.close()
exit()

您还可以使用PyCharm Pro或pgadmin直接连接到数据库。

现在我已经解决了这个问题,尽管更改了配置文件,它仍然不提示我登录。