Add access token expiration configuration and new auth session endpoint
Build and Push Reader API Image / docker (push) Successful in 54s
Build and Push Reader API Image / docker (push) Successful in 54s
This commit is contained in:
+4
-1
@@ -17,8 +17,11 @@ SESSION_COOKIE_KEYS = [
|
|||||||
"__Secure-next-auth.session-token",
|
"__Secure-next-auth.session-token",
|
||||||
"authjs.session-token",
|
"authjs.session-token",
|
||||||
"__Secure-authjs.session-token",
|
"__Secure-authjs.session-token",
|
||||||
|
"reader_access_token",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
ACCESS_TOKEN_TTL_SECONDS = 7 * 24 * 60 * 60
|
||||||
|
|
||||||
|
|
||||||
def _jwt_secret() -> str:
|
def _jwt_secret() -> str:
|
||||||
return settings.mobile_jwt_secret or settings.nextauth_secret
|
return settings.mobile_jwt_secret or settings.nextauth_secret
|
||||||
@@ -29,7 +32,7 @@ def create_access_token(user_id: str) -> str:
|
|||||||
payload = {
|
payload = {
|
||||||
"sub": user_id,
|
"sub": user_id,
|
||||||
"iat": int(now.timestamp()),
|
"iat": int(now.timestamp()),
|
||||||
"exp": int((now + dt.timedelta(days=7)).timestamp()),
|
"exp": int((now + dt.timedelta(seconds=ACCESS_TOKEN_TTL_SECONDS)).timestamp()),
|
||||||
}
|
}
|
||||||
secret = _jwt_secret()
|
secret = _jwt_secret()
|
||||||
if not secret:
|
if not secret:
|
||||||
|
|||||||
+16
-2
@@ -16,7 +16,7 @@ from pydantic import BaseModel, Field
|
|||||||
from sqlalchemy import text
|
from sqlalchemy import text
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from app.auth import create_access_token, require_current_user
|
from app.auth import ACCESS_TOKEN_TTL_SECONDS, create_access_token, require_current_user
|
||||||
from app.routers import mod
|
from app.routers import mod
|
||||||
from app.config import settings
|
from app.config import settings
|
||||||
from app.database import get_db_session, mongo_client, mongo_db
|
from app.database import get_db_session, mongo_client, mongo_db
|
||||||
@@ -1651,7 +1651,7 @@ async def mobile_login(payload: MobileLoginPayload, db: AsyncSession = Depends(g
|
|||||||
return {
|
return {
|
||||||
"accessToken": access_token,
|
"accessToken": access_token,
|
||||||
"refreshToken": refresh_token,
|
"refreshToken": refresh_token,
|
||||||
"expiresIn": 3600,
|
"expiresIn": ACCESS_TOKEN_TTL_SECONDS,
|
||||||
"user": {
|
"user": {
|
||||||
"id": user["id"],
|
"id": user["id"],
|
||||||
"email": user.get("email"),
|
"email": user.get("email"),
|
||||||
@@ -1660,3 +1660,17 @@ async def mobile_login(payload: MobileLoginPayload, db: AsyncSession = Depends(g
|
|||||||
"role": user.get("role", "USER"),
|
"role": user.get("role", "USER"),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/api/auth/session")
|
||||||
|
async def auth_session(request: Request, db: AsyncSession = Depends(get_db_session)):
|
||||||
|
user = await require_current_user(db, request)
|
||||||
|
return {
|
||||||
|
"user": {
|
||||||
|
"id": user["id"],
|
||||||
|
"email": user.get("email"),
|
||||||
|
"name": user.get("name"),
|
||||||
|
"image": user.get("image"),
|
||||||
|
"role": user.get("role", "USER"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user