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 <[email protected]> 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)
>
>