airflow-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ash Berlin-Taylor <...@apache.org>
Subject Re: custom auth
Date Thu, 07 Mar 2019 10:33:07 GMT
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 <sbpothineni@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)
> 
> 


Mime
View raw message