✨ Added user-agent, ip and last seen to sessions
This commit is contained in:
@@ -32,6 +32,9 @@ class UserSession(ormar.Model):
|
|||||||
user: uuid.UUID = ormar.ForeignKey(User)
|
user: uuid.UUID = ormar.ForeignKey(User)
|
||||||
session_key: str = ormar.String(unique=True, max_length=64)
|
session_key: str = ormar.String(unique=True, max_length=64)
|
||||||
created_at: datetime = ormar.DateTime(default=datetime.now())
|
created_at: datetime = ormar.DateTime(default=datetime.now())
|
||||||
|
ip_address: str = ormar.String(max_length=100, nullable=True)
|
||||||
|
user_agent: str = ormar.String(max_length=255, nullable=True)
|
||||||
|
last_seen: datetime = ormar.DateTime(default=datetime.now())
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
tablename = 'user_sessions'
|
tablename = 'user_sessions'
|
||||||
|
|||||||
@@ -48,9 +48,10 @@ async def login_for_cookie_access_token(request: Request, response: Response,
|
|||||||
detail="Incorrect username or password",
|
detail="Incorrect username or password",
|
||||||
)
|
)
|
||||||
session_key = os.urandom(32).hex()
|
session_key = os.urandom(32).hex()
|
||||||
user_session = UserSession(user=user, session_key=session_key)
|
user_session = UserSession(user=user, session_key=session_key, ip_address=request.client.host,
|
||||||
# print(user_session, "HALLO!!!!")
|
user_agent=request.headers.get("User-Agent"))
|
||||||
await user_session.save()
|
await user_session.save()
|
||||||
|
# await user_session.save()
|
||||||
access_token_expires = timedelta(minutes=settings.access_token_expire_minutes)
|
access_token_expires = timedelta(minutes=settings.access_token_expire_minutes)
|
||||||
access_token = create_access_token(
|
access_token = create_access_token(
|
||||||
data={"sub": user.email}, expires_delta=access_token_expires
|
data={"sub": user.email}, expires_delta=access_token_expires
|
||||||
@@ -74,7 +75,6 @@ async def rememberme_token(request: Request, response: Response):
|
|||||||
UserSession.user).get_or_none()
|
UserSession.user).get_or_none()
|
||||||
if (user_session is None) or (user_session.user is None):
|
if (user_session is None) or (user_session.user is None):
|
||||||
raise HTTPException(status_code=401, detail="No user session")
|
raise HTTPException(status_code=401, detail="No user session")
|
||||||
|
|
||||||
access_token_expires = timedelta(minutes=settings.access_token_expire_minutes * 60)
|
access_token_expires = timedelta(minutes=settings.access_token_expire_minutes * 60)
|
||||||
access_token = create_access_token(
|
access_token = create_access_token(
|
||||||
data={"sub": user_session.user.email}, expires_delta=access_token_expires
|
data={"sub": user_session.user.email}, expires_delta=access_token_expires
|
||||||
@@ -82,6 +82,7 @@ async def rememberme_token(request: Request, response: Response):
|
|||||||
response.set_cookie(key="access_token", value=f"Bearer {access_token}",
|
response.set_cookie(key="access_token", value=f"Bearer {access_token}",
|
||||||
httponly=True, samesite='strict', max_age=settings.access_token_expire_minutes * 60)
|
httponly=True, samesite='strict', max_age=settings.access_token_expire_minutes * 60)
|
||||||
response.set_cookie(key="expiry", value="", max_age=settings.access_token_expire_minutes * 60)
|
response.set_cookie(key="expiry", value="", max_age=settings.access_token_expire_minutes * 60)
|
||||||
|
await user_session.update(last_seen=datetime.now())
|
||||||
|
|
||||||
|
|
||||||
@router.get("/logout")
|
@router.get("/logout")
|
||||||
|
|||||||
Reference in New Issue
Block a user