You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@airflow.apache.org by Sudhir Babu Pothineni <sb...@gmail.com> on 2019/03/06 22:01:12 UTC
Re: custom auth
Hi Devs,
We have our own users database, I am doign liek this to authenticate:
try:
cred = authenticate(session, username, password)
if cred:
user = models.User(
username=username,
is_superuser=False)
user.is_active=True
session.merge(user)
flask_login.login_user(user)
session.commit()
return redirect(request.args.get("next") or url_for("admin.index"))
except AuthenticationError:
flash("Incorrect login details")
return self.render('airflow/login.html',
title="Airflow - Login",
form=form)
but its failing if user already exists, is there any alternative to check existing user and keep forwarding?
IntegrityError: (sqlite3.IntegrityError) column username is not unique [SQL: u'INSERT INTO users (username, email, superuser) VALUES (?, ?, ?)'] [parameters: (u'testuser', None, 0)] (Background on this error at: http://sqlalche.me/e/gkpj)
Re: custom auth
Posted by Ash Berlin-Taylor <as...@apache.org>.
The problem is you are creating a new User record, which maps to an INSERT statment every request/log in.
Instead you should query first to find the record. Something like this:
user = session.query(models.User).filter(
models.User.username == username).first()
if not user:
user = models.User(...)
session.merge(user)
flask_login.login_user(user)
> On 6 Mar 2019, at 22:01, Sudhir Babu Pothineni <sb...@gmail.com> wrote:
>
> Hi Devs,
>
> We have our own users database, I am doign liek this to authenticate:
> try:
> cred = authenticate(session, username, password)
> if cred:
> user = models.User(
> username=username,
> is_superuser=False)
> user.is_active=True
>
> session.merge(user)
> flask_login.login_user(user)
> session.commit()
> return redirect(request.args.get("next") or url_for("admin.index"))
> except AuthenticationError:
> flash("Incorrect login details")
> return self.render('airflow/login.html',
> title="Airflow - Login",
> form=form)
> but its failing if user already exists, is there any alternative to check existing user and keep forwarding?
>
> IntegrityError: (sqlite3.IntegrityError) column username is not unique [SQL: u'INSERT INTO users (username, email, superuser) VALUES (?, ?, ?)'] [parameters: (u'testuser', None, 0)] (Background on this error at: http://sqlalche.me/e/gkpj)
>
>