diff --git a/alembic/versions/ab1167fc8260_add_user_last_session_id.py b/alembic/versions/ab1167fc8260_add_user_last_session_id.py new file mode 100644 index 00000000..7f2d1e69 --- /dev/null +++ b/alembic/versions/ab1167fc8260_add_user_last_session_id.py @@ -0,0 +1,28 @@ +"""add_user_last_session_id + +Revision ID: ab1167fc8260 +Revises: 432c5287256d +Create Date: 2019-05-15 16:25:48.766451 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import postgresql + +# revision identifiers, used by Alembic. +revision = 'ab1167fc8260' +down_revision = '432c5287256d' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('users', sa.Column('last_session_id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=True)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('users', 'last_session_id') + # ### end Alembic commands ### diff --git a/atst/domain/users.py b/atst/domain/users.py index baf5acb0..43dbdb86 100644 --- a/atst/domain/users.py +++ b/atst/domain/users.py @@ -89,6 +89,13 @@ class Users(object): db.session.add(user) db.session.commit() + + @classmethod + def update_last_session_id(cls, user, session_id): + user.last_session_id = session_id + db.session.add(user) + db.session.commit() + @classmethod def finalize(cls, user): user.provisional = False diff --git a/atst/models/user.py b/atst/models/user.py index c1693a37..0f093a94 100644 --- a/atst/models/user.py +++ b/atst/models/user.py @@ -58,6 +58,7 @@ class User( designation = Column(String) date_latest_training = Column(Date) last_login = Column(TIMESTAMP(timezone=True), nullable=True) + last_session_id = types.Id() provisional = Column(Boolean) diff --git a/atst/routes/__init__.py b/atst/routes/__init__.py index f923517f..7dbecddd 100644 --- a/atst/routes/__init__.py +++ b/atst/routes/__init__.py @@ -8,9 +8,9 @@ from flask import ( url_for, request, make_response, + current_app as app ) -from flask import current_app as app from jinja2.exceptions import TemplateNotFound import pendulum import os @@ -123,8 +123,11 @@ def redirect_after_login_url(): def current_user_setup(user): + session_id = session.sid + app.redis.delete("session:{}".format(user.last_session_id)) session["user_id"] = user.id session["last_login"] = user.last_login + Users.update_last_session_id(user, session_id) Users.update_last_login(user)